C# web api中带可选参数的路由

C# web api中带可选参数的路由,c#,asp.net-web-api,asp.net-web-api-routing,C#,Asp.net Web Api,Asp.net Web Api Routing,使用web api我转到/api/cat/orders/ 我指定了以下路由和控制器方法。我希望使用“ApiRouteWithCategoryAndExtId”路由和“GetMessageByCategoryExtId”方法,因为我将“extid”设置为可选。但它使用的是默认的Get方法 (/api/cat/orders/id18使用GetMessageByCategoryExtId,但extid不是可选的) 我做错了什么 路线: 控制器: 这里您需要为extid指定一个默认值: public

使用web api我转到/api/cat/orders/

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

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

我做错了什么

路线:

控制器:


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

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

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

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

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

什么是默认路由,它是在这些其他路由之前还是之后定义的?这是仅有的两个路由,所以我想第一个是默认路由?这可能与te-webapi约定有关,或者只是因为它基于模式匹配第一条路由,而不是基于实际内容。但我不知道如何检查这里发生了什么。默认路由是什么,它是在其他路由之前还是之后定义的?这是仅有的两条路由,所以我想第一条是默认路由?这可能与te-webapi约定有关,或者只是因为它基于模式匹配第一条路由,而不是基于实际内容。但我不知道如何检查这里发生了什么。
public HttpResponseMessage GetMessageByCategoryExtId(
    string category, string extid **= null**)