【问题标题】:Replacing UseMvc in .Net Core 3.0在 .Net Core 3.0 中替换 UseMvc
【发布时间】:2019-10-18 17:41:56
【问题描述】:

我试图弄清楚如何正确替换曾经是 .net core 2.2 一部分的 app.UseMvc() 代码。这些示例甚至告诉我可以调用的所有代码是什么,但我还不明白应该调用哪个代码。例如,对于我的 MVC Web 应用程序,我有以下内容:

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()。我需要两个都打还是我想只打一个?两者之间的实际区别是什么?如何设置默认控制器和默认操作?

【问题讨论】:

  • 一个用于控制器 (MVC),另一个用于 Razor Pages。他们每个人都可以有自己的路线设置。

标签: c# routing .net-core-3.0 asp.net-core-3.0


【解决方案1】:

这在Migrate from ASP.NET Core 2.2 to 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?}");
        });
    }

查看documentation的使用顺序。

【讨论】:

    【解决方案2】:

    修复它的最简单方法... 构建一个针对您需要的 .NET Core 的新项目,然后复制新的 Configure 方法并粘贴到您要迁移到的项目中...

    在这个例子中... 以下是旧代码行:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
    
        app.UseMvc();
    }
    

    以下是新的代码行:

    // This method gets called by the runtime. Use this method to configure 
    the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
    
        app.UseHttpsRedirection();
    
        app.UseRouting();
    
        app.UseAuthorization();
    
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
    

    【讨论】:

      猜你喜欢
      • 2020-02-23
      • 1970-01-01
      • 2021-07-23
      • 2018-08-22
      • 2020-02-17
      • 2019-12-01
      • 2021-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多