使用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)
答案 0 :(得分:1)
在这里,您需要为extid
指定默认值:
public HttpResponseMessage GetMessageByCategoryExtId(
string category, string extid **= null**)
如果未指定上述默认值,webapi会尝试严格匹配操作的参数与可用值(通过路由参数或查询字符串值),因为此处您的网址/api/cat/orders/
没有'extid'的值,它不在路线值中,因此webapi无法与GetMessageByCategoryExtId
匹配。