gpt4 book ai didi

c# - 为什么返回 ` ActionResult>` 的 ASP.NET Core 操作可以返回任何对象的 `BadRequest()`?

转载 作者:行者123 更新时间:2023-12-04 04:20:14 26 4
gpt4 key购买 nike

我想知道为什么 ASP.NET Core 操作返回 ActionResult<IEnumerable<ZapResult>>可能返回 BadRequest(scan) , 其中 scan是自定义用户定义类的对象吗?

在这种情况下,我看不到任何明智的转换 ZapScan 的方法。至IEnumerable<ZapResult> .

确实,Ok()BadRequest()返回派生自 ActionResult 的对象(不是 ActionResult<T> ),但在任何一种情况下,一切正常,并且 JSON 返回给客户端:

[HttpGet, FormatFilter]
public ActionResult<IEnumerable<ZapResult>> OnGet([FromQuery] ZapScan scan)
{
return HandleRequest(scan);
}

private ActionResult<IEnumerable<ZapResult>> HandleRequest(ZapScan scan)
{
if (ValidateScan(scan)) {
IEnumerable<ZapResult> zapResults = _zapDispatcher.Dispatch(scan);
return Ok(zapResults);
}
else
{
var clientIp = HttpContext.Request.HttpContext.Connection.RemoteIpAddress;
var requestUrl = UriHelper.GetDisplayUrl(HttpContext.Request);
_logger.LogError("{0}: Invalid request: [{1}] {2} ({3})", MethodBase.GetCurrentMethod().Name, clientIp, requestUrl, scan);
return BadRequest(scan);
}
}

对我来说,似乎任何东西都可以转换为 ActionResult<T> ,并且这种返回类型是完全通用的?

最佳答案

BadRequestResult (由 BadRequest() 返回)派生自 ActionResult .ActionResult<T>可隐式转换为 ActionResult (通过它实现的IConvertToActionResult 接口(interface))。

因此返回类型是兼容的,这就是为什么它们可以互换使用。
BadRequestResult有一个构造函数,它接受任何 object并将其序列化为按原样输出给客户端的字符串。

关于c# - 为什么返回 ` ActionResult<IEnumerable<ZapResult>>` 的 ASP.NET Core 操作可以返回任何对象的 `BadRequest()`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59577229/

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