在AspNetCore 3.1中,当路由出现歧义时会抛出AmbiguousMatchException异常。以下是一个解决方法的示例代码:
在Startup.cs文件中,使用UseEndpoints方法配置路由时,可以使用具有不同优先级的多个路由模板来解决歧义。
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "areaRoute",
pattern: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
}
在上面的示例中,通过使用带有“area:exists”约束的路由模板,确保当请求的URL中包含“/AreaName/”时,会使用带有区域路由的模板。否则,将使用默认的路由模板。
这种方式可以解决路由模板歧义的问题,确保正确的路由匹配。