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() 吗?
没有指定 authenticationScheme,也没有找到 DefaultChallengeScheme - ASP.NET core 2.1