在 .Net 5.0 API 中,我有一個操作,在該操作上應用了如下定義的多個屬性路由
[HttpGet, Route("Get/{id?}"), Route("{id}")]
public void Get(long id)
{
//do something
}
使用此路由,以下路徑作業正常
-
api/Controller/1 -
api/Controller/Get/1
但是,如果我將 id 作為查詢引數傳遞,我總是在“id”中得到 0。
例如
api/Controller/Get?id=1.
知道可能導致此問題的原因以及如何解決嗎?
uj5u.com熱心網友回復:
問題似乎出在 [APIController] 屬性和 [Route] 屬性上。我將 SuppressInferBindingSourcesForParameters 設定為 true,它似乎解決了問題,現在所有三種 URL 格式都可以使用。
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressInferBindingSourcesForParameters = true;
});
uj5u.com熱心網友回復:
剛剛使用 net 5 和 net 6 、VS 2022 和 Postman 進行了測驗
api/Controller/Get?id=1
它作業正常
我用過這個控制器,動作
[Route("api/[controller]")]
public class MyController : ControllerBase
{
[HttpGet, Route("Get/{id?}"), Route("{id}")]
public void Get(long id)
{
//do something
}
...
}
更新
但是如果我添加 [ApiController] 屬性然后查詢字串 id 是 0
[ApiController]
[Route("api/[controller]")]
public class MyController : ControllerBase
似乎 ApiController 根本不應該有查詢字串。即使我改變路線,它也不起作用
[HttpGet, Route("Get}")]
public void Get(long id)
{
//do something
}
更新 2
請參閱 PO 回答如何使 ApiController 接受來自查詢字串的引數。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/360889.html
