当使用ASP.NET Core并在控制器级别指定路由值时,如果提供的路由值与请求的URL不匹配,可能会出现“No route matches the supplied values”错误。以下是解决此问题的几种方法:
[Route("api/[controller]/[action]")]
public class MyController : Controller
{
[HttpGet("{id}")]
public IActionResult Get(int id)
{
// Controller logic
}
}
在上面的示例中,要访问Get
动作,URL应该是/api/My/Get/1
。如果请求的URL不匹配,将会出现“No route matches the supplied values”错误。
ConfigureServices
方法中,使用AddControllersWithViews
或AddMvc
方法添加控制器,并在Configure
方法中使用UseEndpoints
方法配置路由。public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// Other configurations
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
确保路由的顺序和配置正确,以便与控制器的路由值匹配。
如果控制器的路由值包含参数,则在请求URL中提供相应的值。例如,如果控制器的路由值是[Route("api/[controller]/{id}")]
,则请求的URL应该是/api/My/1
,其中1
是id的值。
确保请求的URL不包含任何额外的路径或参数,这可能导致路由值与URL不匹配。例如,如果控制器的路由值是[Route("api/[controller]")]
,则请求的URL应该是/api/My
,而不是/api/My/1
。
通过检查控制器的路由值和请求的URL,配置正确的路由和提供正确的参数,您应该能够解决“No route matches the supplied values”错误。