ApiController路由似乎忽略了动作

时间:2015-07-15 05:28:59

标签: asp.net-mvc-4 routes

使用RouteConfig.cs中定义的路由

  routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Durandal", action = "Index", id = UrlParameter.Optional }
    );

我希望http://localhost:50441/api/Induction/GetIntro/4108能够解析为

Controller = InductionController
Action = "GetIntro"
Id = 4108

并调用此类的GetIntro方法

using System.Web.Http;

namespace MyMvcApp.Controllers
{
  public class InductionController : ApiController
  {    
    public object GetIntro(int inductionId)
    {     
      //simplified for brevity    
      return new {
        Title = "foo",
        Text = "Some introductory blather"
      };
    }
  }
}

但它没有。我得到了404 Not Found,而这个问题就是为什么。

大多数样本似乎使用MapHttpRoute而不是MapRoute,MapRoute是一个包装MapHttpRoute的扩展方法。

1 个答案:

答案 0 :(得分:1)

我对RouteConfig.cs的存在感到困惑,WebApiConfig.cs也定义了路线。它的工作原理如下:

  • WebApi路由由RouteConfig.cs
  • 配置
  • MVC路由由api\{controller}\{id}
  • 配置
  • 你们两个都是因为它是一个支持WebApi的MVC项目。

在我的项目中,WebApiConfig.cs中定义的路由为api\{controller}\{action}\{id},在此之前,另一条路由api\{controller}\{id}解决了问题。

模板生成的CRUD方法有效,因为它们匹配MainActivity.java