1

使用 web-api 我去 /api/cat/orders/

我指定了以下路线和控制器方法。我希望使用“ApiRouteWithCategoryAndExtId”路由和“GetMessageByCategoryExtId”方法,因为我将“extid”设为可选。但它使用的是默认的 Get 方法。

(/api/cat/orders/id18 使用GetMessageByCategoryExtId,但是extid 不是可选的)

我究竟做错了什么?

路线:

config.Routes.MapHttpRoute(
    name: "ApiRouteUniqueId",
    routeTemplate: "api/def/{id}",
    defaults: new { id = RouteParameter.Optional, controller = "Default" }
);

config.Routes.MapHttpRoute(
    name: "ApiRouteWithCategoryAndExtId",
    routeTemplate: "api/cat/{category}/{extid}",
    defaults: new { extid = RouteParameter.Optional, controller = "Default"}
);

控制器:

public string Get()

public HttpResponseMessage GetMessageById(int id)

public HttpResponseMessage GetMessageByCategoryExtId(
    string category, string extid)
4

1 回答 1

1

在这里,您需要为 指定默认值extid

public HttpResponseMessage GetMessageByCategoryExtId(
    string category, string extid **= null**)

如果未指定上述默认值,webapi 会尝试将操作参数与可用值进行严格匹配(通过路由参数或查询字符串值),并且由于此处您的 url/api/cat/orders/没有“extid”值,因此它是' 不存在于路由值中,因此 webapi 无法匹配到GetMessageByCategoryExtId.

于 2013-03-15T16:05:55.690 回答