我正在尝试创建一个基于ASP.NET Core 3的简单项目。
ASP.NET Core 2.2的MVC模板在启动类中包含以下行:
app.UseMvcWithDefaultRoute();
此行在ASP.NET Core 2.2和路由中均能正常工作,但是,在ASP.NET Core 3.0中,它不会编译并显示以下错误
使用端点路由时,不支持使用'UseMvcWithDefaultRoutee'配置MVC。
问题是:“如何在MVC应用程序的.net核心版本3中配置路由?”
答案 0 :(得分:2)
ASP.NET Core 3不存在此功能,因为您可以看到here直到2.2才受支持。
注册完整的MVC管道时,您需要切换到app.UseMvc();
。
对于API,您需要执行以下操作
app.UseRouting();
app.UseEndpoints(builder => builder.MapControllers());
答案 1 :(得分:1)
我在以下官方文档“ Migrate from ASP.NET Core 2.2 to 3.0”中找到了解决方案:
有3种方法:
- 禁用端点路由。
(add in Startup.cs)
services.AddMvc(option => option.EnableEndpointRouting = false)
OR
- 用UseEndpoints替换UseMvc或UseSignalR。
就我而言,结果看起来像这样
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseRouting();
app.UseCors();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute("default", "{controller=Home}/{action=Index}");
});
}
}
OR
- 使用AddControllers()和UseEndpoints()
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseRouting();
app.UseCors();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
答案 2 :(得分:0)
ASP.NET core 3.1中提供了端点路由,如果您想为Home控制器和Index操作添加默认路由,则必须禁用端点路由,以全面了解概念,请访问https://yogeshdotnet.com/use-of-app-usemvcwithdefaultroute-in-asp-net-core-3-1/