Как указать пользовательское местоположение (абсолютный путь) для загрузки областей в asp. net core mvc? - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь загрузить области из пользовательского каталога, указав абсолютный путь (C: / WebApplication7 / MS / {2} / Views / {1} / {0} .cs html) . Я попытался указать AreaLocationFormats в Startup.cs и реализовать IViewLocationExpander . Оба из них работают нормально, когда я даю относительный путь (/MS/-1992/seals_look2-1/010*.*, но мне нужно загрузить представление, предоставив Точный путь к каталогу, так как мои представления будут присутствовать в отдельном каталоге. Возможно ли это каким-то образом?

services.AddControllersWithViews()
                 .AddRazorOptions(options =>
                 {
                     options.AreaViewLocationFormats.Add(@"/MS/{2}/Views/{1}/{0}.cshtml");
                 });
 services.AddControllersWithViews()
                 .AddRazorOptions(options =>
                 {
                     options.ViewLocationExpanders.Add(new ViewLocationExpander());
                 });

public class ViewLocationExpander : IViewLocationExpander
    {
        public IEnumerable<string> ExpandViewLocations(ViewLocationExpanderContext context, IEnumerable<string> viewLocations)
        {
            //{2} is area, {1} is controller,{0} is the action
            string[] locations = new string[] { "/MS/{2}/Views/{1}/{0}.cshtml" };
            return locations.Union(viewLocations);          //Add mvc default locations after ours
        }

        public void PopulateValues(ViewLocationExpanderContext context)
        {
            context.Values["customviewlocation"] = nameof(ViewLocationExpander);
        }
    }

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

С помощью дополнительных исследований я смог сделать это, настроив новый FileProvider

Установить Microsoft.AspNetCore. Mvc .Razor.RuntimeCompilation пакет nuget и строка в Startup.cs

services.Configure<MvcRazorRuntimeCompilationOptions>(options => {
    options.FileProviders.Add(new PhysicalFileProvider(@"C:/WebApplication7"));
});

Подробная информация о настройке провайдера файлов: https://github.com/dotnet/AspNetCore.Docs/issues/14593

С определенным FileProvider оба вышеуказанных метода работают нормально.

0 голосов
/ 20 апреля 2020

Если вы хотите указать указанный c путь обзора в областях, вы можете установить его в app.UseEndpoints.

Предположим, что мое имя области равно MyArea.

В метод startup.cs Configure:

 app.UseEndpoints(endpoints =>
            {

                endpoints.MapControllerRoute(
         name: "MyArea",
         pattern: "C:/WebApplication7/MS/{area:exists}/Views/{controller=Home}/{action=Index}.cshtml");
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
                endpoints.MapBlazorHub();
            });
...