【问题标题】:Doesn't ASP.NET Core have an InternalServerError()?ASP.NET Core 没有 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 代码?

【问题讨论】:

标签: asp.net-core .net-core asp.net-core-mvc


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-27
    • 2018-12-10
    • 2017-07-28
    • 1970-01-01
    • 2021-12-22
    • 2018-05-30
    • 1970-01-01
    • 2019-02-20
    相关资源
    最近更新 更多