簡體   English   中英

ASP.NET Web Api 2-基於屬性的路由-如何強制參數僅查詢字符串?

[英]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:

  • ://主機/員工/ 12345
  • ://主機/員工ID = 12345

我更希望的是不允許使用第一種形式(URI中的參數),只有第二種形式(查詢字符串)可以工作。

我嘗試過的

通常,我嘗試在網絡上搜索實現此目的的方法,但並沒有發現太多。

該頁面討論了路由約束,但是這種語法似乎不起作用(是嗎?)。

該頁面實際上並沒有阻止URI表單正常工作。

有一個名為“ [FromUri]”的屬性,您可以用來裝飾方法參數,並且模型綁定程序將嘗試從Querystring中查找該參數,在這種情況下它可能無濟於事,但是很高興知道因此,如果您要將搜索選項傳遞給Get方法,例如。

希望能有所幫助。

實現此目的的幾種方法。 這里有一些選擇

  1. 將參數重命名為ID以外的其他名稱(例如,employeeId)。
  2. 更改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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM