在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)

在web-api中带可选参数的路由

这里您需要为extid指定一个默认值:

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

如果上面的默认值没有指定,webapi尝试做一个动作的参数与可用值的严格匹配(通过路由参数或查询字符串值),因为这里你的url这里/api/cat/orders/没有'extid'的值,它不存在于路由值,因此webapi不能匹配到GetMessageByCategoryExtId