[英]How do I use ASP.NET Web API Attribute Routing with a complex object parameter?
[英]ASP.NET Web Api 2 - Attribute Based Routing - How do I force a parameter to query string only?
我正在研究Web Api 2項目,並且正在使用基於屬性的路由。 這是一個示例路線:
[Route("{id:int}", Name = "GetEmployeeById")]
[HttpGet]
public IHttpActionResult GetEmployee(int id)
{
...
}
這適用於以下URL:
我更希望的是不允許使用第一種形式(URI中的參數),只有第二種形式(查詢字符串)可以工作。
通常,我嘗試在網絡上搜索實現此目的的方法,但並沒有發現太多。
該頁面討論了路由約束,但是這種語法似乎不起作用(是嗎?)。
該頁面實際上並沒有阻止URI表單正常工作。
有一個名為“ [FromUri]”的屬性,您可以用來裝飾方法參數,並且模型綁定程序將嘗試從Querystring中查找該參數,在這種情況下它可能無濟於事,但是很高興知道因此,如果您要將搜索選項傳遞給Get方法,例如。
希望能有所幫助。
實現此目的的幾種方法。 這里有一些選擇
更改WebApiConfig中的默認路由配置:
//Default configuration, you can see here the "id" parameter which enables action/id matching config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); //It should look like this config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}" );
您也可以使用自定義屬性。
實際上,我對原始代碼有誤。 查詢字符串參數不適用於我指定的路由。 相反,我可以這樣做:
[Route("", Name = "GetEmployeeById")]
[HttpGet]
public IHttpActionResult GetEmployee(int id)
{
...
}
這會做我想要的。 它必須從函數的參數列表中獲取名稱id
。
不幸的是,這意味着我不能再對其施加約束了,但是我想我可以在函數中進行驗證。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.