Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么ASP.NET核心操作可以返回“ActionResult<;IEnumerable<;ZapResult>>;`返回任何对象的'BadRequest()'?_C#_Asp.net_Asp.net Core - Fatal编程技术网

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
。:-)