c# - 如何在生产环境中的Asp.Net Core Web API中禁用400错误请求消息正文?

标签 c# asp.net-core error-handling asp.net-core-webapi bad-request

我有一个Web API项目,在asp.net核心中包含许多 Controller ,验证器,服务和存储库
由于安全原因,我将在生产模式下禁用所有400个错误请求消息正文(从模型或...验证属性)
我如何在asp.net core 2.2中做到这一点?

最佳答案

正如其他人在评论中指出的那样,这可能不是一个好主意,并且如果错误消息的设计正确,也不太可能提高安全性。
但是,如果您仍然希望这样做,一种方法是实现MVC操作过滤器:

public class BadRequestEmptyBodyFilter : IActionFilter, IOrderedFilter
{
    public void OnActionExecuting(ActionExecutingContext context)
    {
        if (context.Result == null && !context.ModelState.IsValid)
        {
            context.Result = new ObjectResult(null)
            {
                StatusCode = StatusCodes.Status400BadRequest
            };
        }
    }

    public void OnActionExecuted(ActionExecutedContext context)
    {
        if (context.Exception != null || context.Result == null)
        {
            return;
        }

        var statusCodeResult = context.Result as IStatusCodeActionResult;
        if (statusCodeResult?.StatusCode == StatusCodes.Status400BadRequest)
        {
            context.Result = new ObjectResult(null)
            {
                StatusCode = StatusCodes.Status400BadRequest
            };
        }
    }

    // Set this to a large negative number so it runs early in the pipeline
    public int Order => -1000000;
}
然后在Startup中注册。另外,您应该将ApiBehaviorOptions.SuppressModelStateInvalidFilter设置为true以禁用默认的错误请求过滤器:
services.AddMvc(options =>
    {
        options.Filters.Add<BadRequestEmptyBodyFilter>();
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
    .ConfigureApiBehaviorOptions(options =>
    {
        options.SuppressModelStateInvalidFilter = true;
    });

关于c# - 如何在生产环境中的Asp.Net Core Web API中禁用400错误请求消息正文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63434660/

相关文章:

c# - 如何修复 ListView 选择更改?

c# - 没有 ASP.NET 标识的 .NET Core 外部身份验证

xml - Google 地球 KML 解析错误

c# - 如何从 WEB API 请求和响应 XML 中删除命名空间?

C# 应用程序 - 在数据库或配置文件中存储首选项?

c# - 无法在窗口应用程序中打开计算机 '.' 上的窗口服务

asp.net-core - Visual Studio 2019 Net 5 ASP.NET Core Web应用程序错误MSB3644找不到.NETFramework的引用程序集,版本=v5.0

angular - 如何正确设置新的 Angular 6 项目

c# - N-Layer/N-Tier 错误处理设计

C# 捕获特定异常类型的重新抛出/传播