gpt4 book ai didi

asp.net-core - 自定义 404 响应模型

转载 作者:行者123 更新时间:2023-12-02 15:19:37 24 4
gpt4 key购买 nike

我想为我们 API 上的所有 404 提供自定义响应。例如:

{
"message": "The requested resource does not exist. Please visit our documentation.."
}

我相信以下结果过滤器适用于 MVC 管道中的所有情况:

public class NotFoundResultFilter : ResultFilterAttribute
{
public override void OnResultExecuting(ResultExecutingContext context)
{
var result = context.Result as NotFoundResult;

if (result != null)
{
context.Result = new HttpNotFoundResult(); // My custom 404 result object
}
}
}

但是,当请求的 URL 与操作路由不匹配时,不会命中上述过滤器。 我怎样才能最好地拦截这些 404 响应?这需要中间件吗?

最佳答案

是的,您需要使用中间件,因为过滤器仅适用于 MVC。

  1. 您可以一如既往地编写自己的中间件

    app.Use(async (context, next) =>
    {
    await next();
    if (context.Response.StatusCode == 404)
    {
    context.Response.ContentType = "application/json";

    await context.Response.WriteAsync(JsonConvert.SerializeObject("your text"), Encoding.UTF8);
    }
    });
  2. 或者使用内置的中间件StatusCodePagesMiddleware ,但由于您只想处理一种状态,因此这是一项额外功能。此中间件可用于处理介于 400 和 600 之间的响应状态代码。您可以配置 StatusCodePagesMiddleware,将以下行之一添加到 Configure 方法(来自 StatusCodePages Sample 的示例):

    app.UseStatusCodePages(); // There is a default response but any of the following can be used to change the behavior.

    // app.UseStatusCodePages(context => context.HttpContext.Response.SendAsync("Handler, status code: " + context.HttpContext.Response.StatusCode, "text/plain"));
    // app.UseStatusCodePages("text/plain", "Response, status code: {0}");
    // app.UseStatusCodePagesWithRedirects("~/errors/{0}"); // PathBase relative
    // app.UseStatusCodePagesWithRedirects("/base/errors/{0}"); // Absolute
    // app.UseStatusCodePages(builder => builder.UseWelcomePage());
    // app.UseStatusCodePagesWithReExecute("/errors/{0}");

关于asp.net-core - 自定义 404 响应模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38278925/

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