簡體   English   中英

Web Api屬性路由,帶有可選參數和查詢參數

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

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