Nei*_*ker 24 c# asp.net-core asp.net-core-webapi
当我阅读关于webapi以响应请求和处理错误时,一切都基于:
IHttpActionResult
HttpResponseException
Run Code Online (Sandbox Code Playgroud)
但是当您创建.net核心webapi项目时,这些项目不可用.我能找到IActionResult,它似乎相当于?
但是我要绕圈试图找出一个非常简单的东西,即如何处理.net核心webapi中的错误,因为HttpResponseException不可用.我得到的印象是"http"中的所有内容,仅适用于完整的MVC应用程序.
我想做的就是返回一个错误,当然它必须简单......
Kir*_*kin 31
IActionResultIHttpActionResult就像你建议的那样相当于.这是ASP.NET Core MVC中所谓的MVC和Web API的整合的一部分.
至于HttpResponseException,这已在ASP.NET Core中完全删除.在GitHub上有一个有趣的问题,David Fowler解释了为什么会出现这种情况:
只是经典,"我们不希望人们使用控制流的例外"范例.人们做的事情就是从他们的业务逻辑中使用它,这是各种各样的错误.我无法谈论性能问题,因为我没有测量但是抛出一个异常,意味着要获取一些数据比仅返回结果更糟糕.
建议的替代方法是使用各种IActionResult实现来创建JSON响应,返回错误等.再次,从问题:
我的建议是让action方法返回IActionResult(或async变体).
支持IActionResult和对象的原因是它们各自适合不同的目的和不同的风格.对于一些最简单的情况,使用对象很好,但它根本不强大.为了完全控制,有IActionResult,它遵循众所周知的"命令模式".
IActionResult模式允许控制器显式声明作为操作结果应该发生的事情:某种错误代码,重定向,序列化数据对象,渲染视图等.
如果您正在寻找处理控制器之外的错误,您可能会从阅读有关此主题的文档中受益,该文档将详细介绍使用中间件或过滤器进行错误处理.在评论中,有一个指向教程的链接,可以更详细地解释错误处理的某些方面.
为了完整起见,这里是中间件方法教程中的代码:
app.UseExceptionHandler(
options => {
options.Run(
async context =>
{
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
context.Response.ContentType = "text/html";
var ex = context.Features.Get<IExceptionHandlerFeature>();
if (ex != null)
{
var err = $"<h1>Error: {ex.Error.Message}</h1>{ex.Error.StackTrace }";
await context.Response.WriteAsync(err).ConfigureAwait(false);
}
});
}
);
Run Code Online (Sandbox Code Playgroud)
关于这种IExceptionFilter方法还有更多细节,但我不会比现在更大.
| 归档时间: |
|
| 查看次数: |
12645 次 |
| 最近记录: |