ASP. NET Core 3.0 неправильно маршрутизируется - PullRequest
0 голосов
/ 13 февраля 2020

Я недавно обновил существующее ASP. NET Core 2.2 веб-приложение до 3.0 . Теперь все компилируется. Однако, когда я go запускаю приложение, меня встречает список каталогов вместо страницы входа.

enter image description here

Наше приложение использует Razor страниц, в отличие от полноценного MVC. Читая вокруг множества изменений в ASP. NET Core 3.0, я вижу, что способ реализации маршрутизации существенно изменился.

Ранее в ConfigureServices у нас было следующее.

services.AddMvc()
                .AddRazorPagesOptions(options => { options.Conventions.AuthorizeFolder("/"); });

И в Configure методе у нас было это.

app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action=Index}/{id?}");
            });

Это все работало нормально. Какие изменения необходимы для правильной маршрутизации приложения после обновления до ASP. NET Core 3.0.

Ответы [ 2 ]

2 голосов
/ 13 февраля 2020

In. Net Core 3 &. Net Core 3.1 необходимо удалить services.AddMvc().AddRazorPagesOptions(options => { options.Conventions.AuthorizeFolder("/"); }); и services.AddMvc(); из ConfigureServices:

Затем добавить services.AddRazorPages();

В Configure добавьте:

app.UseRouting();

app.UseEndpoints(endpoints => endpoints.MapRazorPages());

app.UseEndpoints(endpoints => { endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}"); });

Наконец ваш код будет таким:

  public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
            {
                services.AddRazorPages();
            }
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                app.UseRouting();
                app.UseEndpoints(endpoints => endpoints.MapRazorPages());
                app.UseEndpoints(endpoints =>
                                             {
                                               endpoints.MapControllerRoute("default", " 
                                               {controller=Home}/{action=Index}/{id?}");
                                              });                 
            }
    }

Для получения дополнительной информации ознакомьтесь с Документация Microsoft

1 голос
/ 13 февраля 2020

Вы должны определить значение по умолчанию controller для маршрута по умолчанию. Например:

app.UseMvc(routes =>
           {
               routes.MapRoute(
                   name: "default",
                   template: "{controller=Home}/{action=Index}/{id?}");
           });

Я не уверен, что ваш контроллер по умолчанию должен быть Home, но определите его на template, и он будет работать, когда пользователь с пустым маршрутом получит доступ к приложению.

...