Asp.netCore GetWebResourceUrl - PullRequest
       5

Asp.netCore GetWebResourceUrl

4 голосов
/ 03 мая 2019

Я пытаюсь создать свой собственный ScriptManagerController, который будет загружать файлы JS из другого проекта.

Эти файлы сохраняются как файлы ресурсов.

Это код, который я использовал в Net451

  var url=  Page.ClientScript.GetWebResourceUrl(this.GetType(), "namespace.CustomComboBox.js") + "?JSReloader=" + DateTime.Now.ToFileTime()
var sc= "<script src="+url+"></script>"

Проблема в том, что доза NetAppCore 2.0 не имеет ClientScriptManager или Page, которую я не могу использовать GetWebResourceUrl

Я все еще могу загрузить содержимое файла js, а затемзагрузить его бросить HtmlString, что в моем случае очень плохо, мой файл js действительно большой, поэтому я хочу его избежать.

Есть ли обходной путь, с которым вы могли бы мне помочь.

Обновление

Ну, это то, что я сделал, я создал контроллер, который возвращает файловый поток в другом проекте, и использовал MapRoute для отображения пространства имен контроллера.

Если у вас есть какое-либо другое решение, вы все равно получите очки.

  app.MapRoute(
            name: "xxx",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index" },
            namespaces: new string[] { "namespace" }

1 Ответ

6 голосов
/ 03 мая 2019

Выполните шаги 4, 5 и 6 этого поста включая-статические-ресурсы-в-бритве-класс-библиотеки

  1. Создать файл конфигурации.

    internal class EditorRCLConfigureOptions : IPostConfigureOptions<StaticFileOptions>
    {
        private readonly IHostingEnvironment _environment;
    
        public EditorRCLConfigureOptions(IHostingEnvironment environment)
        {
            _environment = environment;
        }
    
        public void PostConfigure(string name, StaticFileOptions options)
        {
    
            // Basic initialization in case the options weren't initialized by any other component
            options.ContentTypeProvider = options.ContentTypeProvider ?? new FileExtensionContentTypeProvider();
    
            if (options.FileProvider == null && _environment.WebRootFileProvider == null)
            {
                throw new InvalidOperationException("Missing FileProvider.");
            }
    
            options.FileProvider = options.FileProvider ?? _environment.WebRootFileProvider;
    
    
            // Add our provider
            var filesProvider = new ManifestEmbeddedFileProvider(GetType().Assembly, "resources");
            options.FileProvider = new CompositeFileProvider(options.FileProvider, filesProvider);
        }
    }
    
  2. (Необязательно) Создайте класс расширения (вы также можете пропустить и использовать строку services.ConfigureOptions непосредственно в классе Startup.

     public static class EditorRCLServiceCollectionExtensions
    {
        public static void AddEditor(this IServiceCollection services)
        {
            services.ConfigureOptions(typeof(EditorRCLConfigureOptions));
        }
    }
    
  3. Добавить новую службу в метод ConfigureServices класса запуска:

    services.AddEditor();
    

Теперь вы можете использовать путь к файлу как файл Content, но для встроенных ресурсов!

<script src='@(pathToEmbeddedResource)' />

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...