ASP.NET Core 没有 InternalServerError() 吗?

Posted

技术标签:

【中文标题】ASP.NET Core 没有 InternalServerError() 吗?【英文标题】:Doesn't ASP.NET Core have an InternalServerError()? 【发布时间】:2018-06-22 19:23:17 【问题描述】:

Microsoft.AspNetCore.Mvc.Controller 基类没有用于返回 HTTP 500 状态代码的 BadRequest()Ok()NoContent() 等等效项。

为什么我们不能这样做?

try
  oops();

catch(Excpetion e)
  //some handling
  return InternalServerError(e);

我知道return StatusCode(500); 可以,但我们正在尝试与我们的 HTTP 代码更加一致,并且想知道是否有更符合 Ok() 的内容返回 500 代码?

【问题讨论】:

这完全一样。 500 = 内部服务器错误。如果你愿意,你总是可以创建一个快速的扩展方法。 您始终可以手动设置响应代码。 Response.StatusCode = 500; 相关帖子 - How to return HTTP 500 from ASP.NET Core RC2 Web Api? 【参考方案1】:

ASP.NET Core 2.x 没有 InternalServerError 方法。相反,您可以包含以下库。

using Microsoft.AspNetCore.Http;

然后使用下面的代码。

return new StatusCodeResult(StatusCodes.Status500InternalServerError);

或者如果您想在响应中添加异常,请尝试以下代码

var result = StatusCode(StatusCodes.Status500InternalServerError, exception);
return result;    

【讨论】:

如果由于某种原因您需要保持 api 与“InternalServerError”向后兼容,您可以使用 Microsoft.AspNetCore.Mvc.WebApiCompatShim 但添加包的工作不仅仅是将您的代码重构为一个Foyzul 发布。 nuget.org/packages/Microsoft.AspNetCore.Mvc.WebApiCompatShim 我不知道在原始答案时是否是这种情况,但是ControllerBase类现在有一个返回StatusCodeResult的StatusCode方法。所以代码现在可以是:return StatusCode(StatusCodes.Status500InternalServerError);【参考方案2】:

如果您像我一样不明白卡里姆回答中 StatusCode 方法的来源,那么这段代码也可以正常工作:

var errorObjectResult = new ObjectResult(exceptionMessage);
errorObjectResult.StatusCode = StatusCodes.Status500InternalServerError;
                
return errorObjectResult;

【讨论】:

以上是关于ASP.NET Core 没有 InternalServerError() 吗?的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core ApiAuthorizationDbContext 没有为数据模型创建表

ASP.NET Core 没有 InternalServerError() 吗?

ASP.NET Core 标识:角色管理器没有服务

没有指定 authenticationScheme,也没有找到 DefaultChallengeScheme - ASP.NET core 2.1

Asp.Net core api 中没有释放内存

Visual Studio Community Update 3 中没有 ASP.NET 5 / Core 模板