路由器以这种方式配置:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "api",
template: "api/{action}/{id?}");
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "spa-fallback",
template: "{*url}",
defaults: new { controller = "Home", action = "Index"});
});
我试图请求的控制器I动作如下所示: //获取api / values / 5
[HttpGet("{id}")]
public string Get(int id)
{
return "value" + id;
}
当我请求http://localhost:54057/api/values/get时,我会收到“value0”。
当我请求http://localhost:54057/api/values/get时,我会收到“value0”。
当我请求http://localhost:54057/api/values/get/5时,我会找回404 Not Found。
我的路由配置不正确,或者为什么“id”参数没有从URL传递到控制器操作?
答案 0 :(得分:0)
我认为你需要指定控制器而不是动作。您的路线应定义为:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "api",
template: "api/{controller}/{id?}"); <-- Note the change here
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "spa-fallback",
template: "{*url}",
defaults: new { controller = "Home", action = "Index"});
});
在未指定参数时获得结果的原因很可能是由于调用了回退路径。如果您想知道正在调用哪条路线,请查看Route Debugging上的这篇文章。
答案 1 :(得分:0)
定义完整路由,SPA会覆盖默认的MVC路由
[HttpGet("api/[controller]/[action]/{id}")]
public IActionResult Get(int id)
{
return ...;
}