![](/img/trans.png)
[英]ASP.net Core API returning ActionResult<T> not enforcing return type
[英]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.