[英]Web Api Attribute Routing with optional parameters and query parameters
我有這個web api控制器:
[RoutePrefix("api/product")]
public class ProductController : ApiController
{
[HttpGet, Route("{id?}")]
public async Task<HttpResponseMessage> GetProduct([FromUri] string param1 = null, [FromUri] string param2 = null, Guid? id = null)
{
...
}
}
我想訪問那些uri:
API /產品/?參數1 =東西&參數2 = SMT
要么
API /產品/ 7b55fcee-21e7-4b10-80e3-42b4d9cf913d?參數1 =東西&參數2 = SMT
但是,第一個uri不起作用,未設置route參數的默認值。
這個uri有效:
API /產品/空?參數1 =東西&參數2 = SMT
不是這個:
API /產品/?參數1 =東西&參數2 = SMT
我試圖使用類型“字符串”作為路由參數,但它仍然無法正常工作。
是參數的順序嗎?
或者我誤解了Web Api Route Mapping的一些內容?
編輯:我的WebApiConfig.cs不包含默認路由:
public static class EdmWebApiConfig
{
public static void Register(HttpConfiguration config)
{
if (config == null) throw new ArgumentNullException(nameof(config));
// Attribute routing
config.MapHttpAttributeRoutes();
...
some declaration of formatters
...
}
}
我應該申報默認路線嗎?
在我看來,由於我使用屬性映射,我不需要這樣做。
我嘗試改變我的路由:
[RoutePrefix("api")]
public class ProductController : ApiController
{
[HttpGet, Route("product/get/{id?}")]
public async Task<HttpResponseMessage> GetProduct([FromUri] Guid param1, [FromUri] string param2, Guid? id = null)
{
...
}
}
這個uri api / product / get /?param1 = something&param2 = smt仍然不起作用。
(我試過api / product /?param1 = something&param2 = smt和相關的路由,不工作)
我是否需要在WebApiConfig.cs中聲明默認路由?
你可以在WebApiConfig.cs中做什么,你應該能夠在屬性路由中做到這一點,不是嗎? 像可選參數,約束,......
您的路由前綴太具體了。 我相信你想:
[RoutePrefix("api")]
public class ProductController : ApiController
{
[HttpGet, Route("product/{id?}")]
public async Task<HttpResponseMessage> GetProduct([FromUri] string param1 = null, [FromUri] string param2 = null, Guid? id = null)
{
...
}
}
哪個應該適合你。 路由前綴本身不是路由,因此默認路由應該不太具體。
我無法重建此錯誤,但我想為您推薦更好的模式。
您有一個過於籠統的方法,需要在完成實際工作之前對參數進行重大檢查。
如果你有兩個獨立的端點,這將更好。 一般的Get
方法,如:
Get([FromUri] string keyword = null)
另一個如:
GetById(Guid id)
您設置RoutePrefix
是正確的,您無需更改它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.