.NET Core WebAPI - 带有属性路由的 404 回退

Posted

技术标签:

【中文标题】.NET Core WebAPI - 带有属性路由的 404 回退【英文标题】:.NET Core WebAPI - 404 fallback with attribute routing 【发布时间】:2021-01-26 10:21:34 【问题描述】:

.NET Core 3.1 中实现我的第一个 restful webapi 时,我正在尝试实现 404 错误的后备例程。我的 Startup.cs 实际看起来像这样:

public void ConfigureServices(IServiceCollection services)

    services.AddControllers();
    // ...


public void Configure(IApplicationBuilder app, IWebHostEnvironment env)

    // ...
    app.UseRouting();

    app.UseEndpoints(endpoints =>
    
        endpoints.MapControllers();
        endpoints.MapFallbackToController("EndpointNotFound", "Fallback");
    );

在此配置中,404 回退在实际路由到相应控制器之前生效。我在 api 控制器中使用属性路由。一般是否可以在属性路由中使用MapFallbackToController() 方法?如果没有,是否有有用的中间件替代品?

问候

【问题讨论】:

【参考方案1】:

一些选项可以实现这一点,您可以从这里开始并探索其他可能性(以下在 Startup.cs 的 Configure 方法中配置):

选项 1 app.UseStatusCodePages(); 这将显示内置的默认页面。

选项 2 app.UseStatusCodePagesWithRedirects("~/MyCustomController/0"); 占位符 0 将填充 HttpStatusCode 例如:404

此方法常用于app:

应该将客户端重定向到不同的端点,通常是在 > 不同的应用程序处理错误的情况下。对于 Web 应用程序,客户端的浏览器 地址栏反映了重定向的端点。 不应保留原始状态代码并将其与初始重定向响应一起返回。

选项 3 app.UseStatusCodePagesWithReExecute("~/MyCustomController/0"); 与选项 2 相同,但有所不同

此方法常用于应用应:

处理请求而不重定向到不同的端点。网页版 应用程序,客户端的浏览器地址栏反映了最初请求的>端点。 保留原始状态代码并将其与响应一起返回。

您可以将其用作处理错误Handle errors in ASP.NET Core的更广泛详细信息的参考

【讨论】:

以上是关于.NET Core WebAPI - 带有属性路由的 404 回退的主要内容,如果未能解决你的问题,请参考以下文章

.NET core 2.1 Web API 是不是支持基于约定的路由?

使用 JWT 令牌的 ASP.NET Core 网站到 WebApi 身份验证

带有 ASP.NET Core WebAPI 的 Dart 中的令牌刷新并发问题

带有 JWT Bearer 令牌和 ASP.NET Core 2 WebApi 的 Azure AD 用户信息

带有 SPA 的 .NET Core WebApi 项目中的混合身份验证流程

如何使用数据注释为模型属性 WebApi .NET Core 添加布尔验证