我有以下簽名控制器:的Web API可選參數
[Route("products/filter/{apc=apc}/{xpc=xpc}/{sku=sku}")]
public IHttpActionResult Get(string apc, string xpc, int? sku)
{ ... }
我把這種方法用下面的URI:
- 〜/ API /產品/過濾APC = AA & XPC = BB
- 〜/ API /產品/過濾器?SKU = 7199123
的第一個URI工作沒有問題。第二個有一個奇怪的副作用。儘管apc和xpc的默認值在未提供時應爲null,但參數實際上是它們的名稱。我可以通過添加額外的邏輯解決這個問題:
apc = (apc == "apc") ? null : apc;
xpc = (xpc == "xpc") ? null : xpc;
這似乎是一個黑客,並會產生問題,如果傳遞的值是有史以來等於參數名稱。
有沒有辦法定義沒有這種副作用的路線?
您在路線模板中提供了默認值。你爲什麼期望他們是'空'? –
我認爲{sku = sku}將查詢字符串中的參數映射到方法參數。 – Josh
您應該查看[屬性路由的文檔](http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#可選的)。它顯示瞭如何使參數可選。 –