繁体   English   中英

如何在生产环境中禁用 Asp.Net Core web API 中的 400 Bad request 的消息正文?

[英]how to disable 400 Bad request's message body in Asp.Net Core web API in production environment?

我有一个 Web API 项目,在 asp.net 核心中有很多控制器、验证器、服务和存储库

由于安全原因,我将在生产模式下禁用所有 400 个错误请求消息正文(从 model 或...验证属性)

我如何在 asp.net 核心 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;
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM