簡體   English   中英

為什么 ASP.NET Core 操作可以返回 `ActionResult <IEnumerable<ZapResult> &gt;` 返回任何對象的 `BadRequest()`?

[英]Why can an ASP.NET Core action returning an ` ActionResult<IEnumerable<ZapResult>>` return a `BadRequest()` of any object?

我想知道為什么返回ActionResult<IEnumerable<ZapResult>>的 ASP.NET Core 操作可能會返回BadRequest(scan) ,其中scan是自定義用戶定義類的對象?

在這種情況下,我沒有看到任何將ZapScan轉換為IEnumerable<ZapResult>明智方法。

事實上, Ok()BadRequest()返回從ActionResult派生的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接口)。

因此返回類型是兼容的,這就是它們可以互換使用的原因。

BadRequestResult有一個構造函數,它接受任何object並將其序列化為一個字符串,該字符串按原樣輸出到客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM