ASP.Net Web API自定义路由无法正常工作

时间:2012-12-28 17:15:46

标签: asp.net-web-api

我在PersonController类中有以下函数

    [HttpGet]
    [ActionName("GetBloggersNotFollowed")]
    public IQueryable<object> GetBloggersNotFollowed(int companyId)
    {
        return Uow.People.GetPeople().Select(p => new { p.Email, p.FirstName, p.LastName, p.PhoneNumber, p.Type, p.UserName, p.Country, p.Id });
    }

它用于检索人员列表。

我将此功能称为

$.ajax({ 
   url: "/api/person/GetBloggersNotFollowed/1" 
}).success(function (people) { 
     PersonModule.GetPeople(people); 
});

我在WebApiConfig.cs

中宣布了一条路线
config.Routes.MapHttpRoute(
            name: "ActionApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

当我尝试在浏览器中调用路径时出现错误

<Error>
 <Message>
  No HTTP resource was found that matches the request URI 'http://localhost:1045/api/person/GetBloggersNotFollowed/1'.
  </Message>
  <MessageDetail>
       No action was found on the controller 'Person' that matches the request.
  </MessageDetail>
</Error>

我不知道我错了。有谁能看到这个问题?

2 个答案:

答案 0 :(得分:1)

参数的名称对路线匹配很重要。

您已在路线中命名参数id但该方法将其命名为companyId

将路线中的{id}更改为{companyId}或将companyId参数更改为id

答案 1 :(得分:1)

将您的路线替换为此路线:

config.Routes.MapHttpRoute(
            name: "ActionApi",
            routeTemplate: "api/{controller}/{action}/{companyId}",
            defaults: new { id = RouteParameter.Optional }
        );

这个答案补充了马克琼斯的答案。