gpt4 book ai didi

来自路由和查询字符串的 ASP.NET Core 模型绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 01:15:30 27 4
gpt4 key购买 nike

我想执行一个 GET 请求,例如 https://localhost:12345/api/employees/1/calendar/2018/2019?checkHistoricalFlag=true

我在我的 Controller 中创建了这个方法,它按预期工作:

[AllowAnonymous]
[HttpGet("/api/employees/{clockNumber:int}/calendar/{yearFrom:int}/{yearTo:int}")]
public IActionResult Get(int clockNumber, int yearFrom, int yearTo, bool checkHistoricalFlag = false)
{
return Ok();
}

但是我更喜欢使用以下 View 模型:
public class DetailsQuery
{
[Required]
public int? ClockNumber { get; set; }
[Required]
public int? YearFrom { get; set; }
[Required]
public int? YearTo { get; set; }
public bool CheckHistoricalFlag { get; set; } = false;
}

这将绑定(bind)路由参数,但忽略查询字符串中的“checkHistoricalFlag”:
[AllowAnonymous]
[HttpGet("/api/employees/{clockNumber:int}/calendar/{yearFrom:int}/{yearTo:int}")]
public IActionResult Get([FromRoute]DetailsQuery query)
{
return Ok();
}

删除 [FromRoute] 会导致 415“不支持的媒体类型”错误。

是否可以将路由参数和查询字符串值绑定(bind)到单个 View 模型,或者我是否需要单独指定查询字符串值?
[AllowAnonymous]
[HttpGet("/api/employees/{clockNumber:int}/calendar/{yearFrom:int}/{yearTo:int}")]
public IActionResult Get([FromRoute]DetailsQuery query, bool checkHistoricalFlag = false)
{
return Ok();
}

最佳答案

Imantas 的评论指出我在 View 模型上使用 [FromQuery],现在看起来像:

public class DetailsQuery
{
[Required]
public int? ClockNumber { get; set; }
[Required]
public int? YearFrom { get; set; }
[Required]
public int? YearTo { get; set; }
[FromQuery]
public bool CheckHistoricalFlag { get; set; } = false;
}

Controller 方法现在是:
[AllowAnonymous]
[HttpGet("/api/employees/{clockNumber:int}/calendar/{yearFrom:int}/{yearTo:int}")]
public ActionResult Get([FromRoute]DetailsQuery query)
{
return Ok();
}

哪个按预期工作。

感谢指针 Imantas。

关于来自路由和查询字符串的 ASP.NET Core 模型绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54234145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com