C# 为什么ASP.NET核心操作可以返回“ActionResult<;IEnumerable<;ZapResult>>;`返回任何对象的'BadRequest()'?
我想知道为什么返回C# 为什么ASP.NET核心操作可以返回“ActionResult<;IEnumerable<;ZapResult>>;`返回任何对象的'BadRequest()'?,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,我想知道为什么返回ActionResult的ASP.NET核心操作会返回BadRequest(scan),其中scan是自定义用户定义类的对象 在这种情况下,我看不到任何将ZapScan转换为IEnumerable的合理方法 实际上,Ok()和BadRequest()都返回从ActionResult派生的对象(不是ActionResult),但在这两种情况下,一切正常,JSON返回给客户端: [HttpGet, FormatFilter] public ActionResult<IEnum
ActionResult
的ASP.NET核心操作会返回BadRequest(scan)
,其中scan
是自定义用户定义类的对象
在这种情况下,我看不到任何将ZapScan
转换为IEnumerable
的合理方法
实际上,Ok()
和BadRequest()
都返回从ActionResult
派生的对象(不是ActionResult
),但在这两种情况下,一切正常,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);
}
}
[HttpGet,FormatFilter]
公共行动结果OnGet([FromQuery]ZapScan扫描)
{
返回HandlerRequest(扫描);
}
私有操作结果HandlerRequest(ZapScan扫描)
{
如果(验证扫描)){
IEnumerable zapResults=\u zapDispatcher.Dispatch(扫描);
返回Ok(正常);
}
其他的
{
var clientIp=HttpContext.Request.HttpContext.Connection.RemoteIpAddress;
var requestUrl=UriHelper.GetDisplayUrl(HttpContext.Request);
_logger.LogError(“{0}:无效请求:[{1}]{2}({3})”,MethodBase.GetCurrentMethod().Name,clientIp,requestUrl,scan);
返回请求(扫描);
}
}
在我看来,似乎任何东西都可以转换为
ActionResult
,并且这种返回类型是完全通用的?BadRequestResult
(由BadRequest()
返回)派生自ActionResult
ActionResult
可隐式转换为ActionResult
(通过它实现的IConvertToActionResult
接口)
因此,返回类型是兼容的,这就是为什么它们可以互换使用
BadRequestResult
有一个构造函数,它接受任何对象
并将其序列化为字符串,然后按原样输出到客户端。它应该能够将其转换为ActionResult
。我对您的最终结果要求有点困惑。@panoskarajohn-ZapScan
不是一个IEnumerable
,那么为什么我可以从返回类型为ActionResult
的方法返回BadRequest(scan)
?为什么将ActionResult
转换为IActionResult
(不是ActionResult
)?另外,尽管ActionResult
转换为IActionResult
,但我的方法中的返回类型仍然是ActionResult
-不是IActionResult
。:-)