gpt4 book ai didi

c# - ASP.NET Core 相当于 ASP.NET MVC 5 的 HttpException

转载 作者:行者123 更新时间:2023-11-30 18:23:12 25 4
gpt4 key购买 nike

在 ASP.NET MVC 5 中你可以抛出 HttpException使用 HTTP 代码,这将像这样设置响应:

throw new HttpException((int)HttpStatusCode.BadRequest, "Bad Request.");

HttpException 在 ASP.NET Core 中不存在。等效代码是什么?

最佳答案

我实现了自己的 HttpException 和支持捕获所有 HttpException 并将它们转换为相应错误响应的中间件。下面是一个简短的摘录。您还可以使用 Boxed.AspNetCore Nuget 包。

Startup.cs 中的使用示例

public void Configure(IApplicationBuilder application)
{
application.UseIISPlatformHandler();

application.UseStatusCodePagesWithReExecute("/error/{0}");
application.UseHttpException();

application.UseMvc();
}

扩展方法

public static class ApplicationBuilderExtensions
{
public static IApplicationBuilder UseHttpException(this IApplicationBuilder application)
{
return application.UseMiddleware<HttpExceptionMiddleware>();
}
}

中间件

internal class HttpExceptionMiddleware
{
private readonly RequestDelegate next;

public HttpExceptionMiddleware(RequestDelegate next)
{
this.next = next;
}

public async Task Invoke(HttpContext context)
{
try
{
await this.next.Invoke(context);
}
catch (HttpException httpException)
{
context.Response.StatusCode = httpException.StatusCode;
var responseFeature = context.Features.Get<IHttpResponseFeature>();
responseFeature.ReasonPhrase = httpException.Message;
}
}
}

HTTP异常

public class HttpException : Exception
{
private readonly int httpStatusCode;

public HttpException(int httpStatusCode)
{
this.httpStatusCode = httpStatusCode;
}

public HttpException(HttpStatusCode httpStatusCode)
{
this.httpStatusCode = (int)httpStatusCode;
}

public HttpException(int httpStatusCode, string message) : base(message)
{
this.httpStatusCode = httpStatusCode;
}

public HttpException(HttpStatusCode httpStatusCode, string message) : base(message)
{
this.httpStatusCode = (int)httpStatusCode;
}

public HttpException(int httpStatusCode, string message, Exception inner) : base(message, inner)
{
this.httpStatusCode = httpStatusCode;
}

public HttpException(HttpStatusCode httpStatusCode, string message, Exception inner) : base(message, inner)
{
this.httpStatusCode = (int)httpStatusCode;
}

public int StatusCode { get { return this.httpStatusCode; } }
}

从长远来看,我建议不要使用异常来返回错误。异常比仅从方法返回错误要慢。

关于c# - ASP.NET Core 相当于 ASP.NET MVC 5 的 HttpException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32678552/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com