Замена UseMvc в .Net Core 3.0 - PullRequest
       12

Замена UseMvc в .Net Core 3.0

0 голосов
/ 18 октября 2019

Я пытаюсь выяснить, как правильно заменить код app.UseMvc(), который используется как часть .net core 2.2. Примеры доходят до того, что рассказывают мне, каковы все коды, которые я могу назвать, но я пока не понимаю, что мне следует называть. Например, для моего веб-приложения MVC у меня есть следующее:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseStatusCodePagesWithReExecute("/Error/Index");
    app.UseMiddleware<ExceptionHandler>();
    app.UseStaticFiles(new StaticFileOptions()
    {
        OnPrepareResponse = (context) =>
        {
            context.Context.Response.GetTypedHeaders()
                .CacheControl = new CacheControlHeaderValue
            {
                MaxAge = TimeSpan.FromDays(30)
            };
        }
    });

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

Прежде чем я предоставлю свою маршрутизацию в опциях UseMvc(). Однако теперь кажется, что я должен предоставить это внутри MapControllerRoute Но примеры всегда, кажется, также вызывают MapRazorPages(). Нужно ли мне звонить обоим или я должен звонить только одному? Какова фактическая разница между ними и как мне установить контроллер по умолчанию и действие по умолчанию?

1 Ответ

1 голос
/ 19 октября 2019

Это описано в статье Миграция с ASP.NET Core 2.2 до 3.0 . Предполагая, что вам нужно приложение MVC.

В следующем примере добавлена ​​поддержка контроллеров, функций, связанных с API, и представлений, но не страниц.

services
    // more specific than AddMvc()
    .AddControllersWithViews()
    .SetCompatibilityVersion(CompatibilityVersion.Version_3_0)

И вСконфигурируйте:

    public void Configure(IApplicationBuilder app)
    {
        app.UseStaticFiles();

        app.UseRouting();

        // The equivalent of 'app.UseMvcWithDefaultRoute()'
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapDefaultControllerRoute();
            // Which is the same as the template
            endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}/{id?}");
        });
    }

Порядок использования statemtents см. В документации .

...