ASP.NET核心路由无法正常工作

时间:2016-09-23 19:14:59

标签: asp.net asp.net-core-mvc

路由器以这种方式配置:

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传递到控制器操作?

2 个答案:

答案 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 ...;
        }