在web-api中带可选参数的路由
本文关键字:参数 路由 web-api | 更新日期: 2023-09-27 18:03:03
使用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)
这里您需要为extid
指定一个默认值:
public HttpResponseMessage GetMessageByCategoryExtId(
string category, string extid **= null**)
如果上面的默认值没有指定,webapi尝试做一个动作的参数与可用值的严格匹配(通过路由参数或查询字符串值),因为这里你的url这里/api/cat/orders/
没有'extid'的值,它不存在于路由值,因此webapi不能匹配到GetMessageByCategoryExtId