[英]ASP.NET Core 2.1 [FromQuery] not getting param
我正在嘗試使用 ASP.NET Core 2.1 從使用[FromQuery]
的查詢參數獲取我的 WebAPI 的參數。 對於我的生活,我無法弄清楚我做錯了什么。
具體操作如下所示:
[Route("api/[controller]/[action]")]
public class AuthController : Controller
{
[HttpGet]
[Authorize(Roles = "admin")]
public async Task<IActionResult> GenerateCode([FromQuery]string email)
{
if (String.IsNullOrEmpty(email))
return new BadRequestObjectResult(new ApiBadRequestResponse(new string[] { "Email is empty." }));
var result = await _mediator.Send(new CreateAccessCode.Command
{
Email = email
});
if (result.Succeeded)
return new OkObjectResult(new ApiOkResponse(result.Data));
return new BadRequestObjectResult(new ApiBadRequestResponse(result.Errors));
}
}
email
始終為空,我在函數中放置了一個斷點,所以我知道它被調用了。
我發送的請求是這樣的:
{{url}}/api/auth/generatecode?email=test
如果我從頭開始創建一個新項目, [FromQuery]
似乎工作,我不知道我在做什么不同。 正在調用該操作,但由於第一行,它始終返回 BadResponse...
我的 startup.cs 函數如下所示:
services.AddMvc()
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
.AddMvcOptions(options =>
{
options.Filters.Add(new ActionValidationFilter());
})
.AddFluentValidation()
.AddJsonOptions(options =>
{
options.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver();
})
.AddSessionStateTempDataProvider();
我完全迷失了。 這是我在 WebAPI 中尋找查詢參數的第一個操作。 所有其他操作都使用 FromBody 並且工作正常。
選項1)
嘗試將您的[HttpGet]
屬性更改為
[HttpGet("GenerateCode/{email}]
如果這樣做,您將需要從控制器的 Route 屬性中刪除/[action]
,所以它只是
[Route("api/[controller]")]
選項 2)
或者,在Startup.cs
更改app.UseMvc();
到
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "api/{controller=Home}/{action=Index}/{id?}");
});
並從控制器屬性中刪除[Route("api/[controller]/[action]")]
並確保您也沒有[ApiController]
屬性
此解決方案將更改您整個項目的路由,因此您必須對所有其他 API 控制器執行相同操作
選項 3)
第三種解決方案是將[Route("api/[controller]/[action]")]
更改為
[Route("api/[controller]/[action]/{id?}")]
我已經測試了所有 3 個解決方案,它們都使用 URL {{url}}/api/ControllerName/ActionName?email=test
回答有點晚,但可能對其他人有幫助
選項 4
您可以在 [FromQuery] 屬性中顯式命名查詢字符串參數名稱
[HttpGet]
[Authorize(Roles = "admin")]
public async Task<IActionResult> GenerateCode([FromQuery(Name="email")] string email)
{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.