首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在生产环境下禁用Asp.Net核心web API中的400 Bad request消息体?

如何在生产环境下禁用Asp.Net核心web API中的400 Bad request消息体?
EN

Stack Overflow用户
提问于 2020-08-16 16:16:20
回答 1查看 1.1K关注 0票数 2

我有一个Web API项目,其中包含asp.net核心中的大量控制器、验证器、服务和存储库

我将禁用所有400个Bad requests消息正文(验证模型中的属性或...)基于安全性的生产方式探讨

如何在asp.net Core2.2中做到这一点?

EN

回答 1

Stack Overflow用户

发布于 2020-08-17 15:44:32

正如其他人在评论中指出的那样,这可能不是一个好主意,如果您的错误消息设计得当,它不太可能提高安全性。

但是,如果您仍然希望这样做,一种方法是实现MVC操作过滤器:

代码语言:javascript
运行
复制
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,以禁用默认的坏请求过滤器:

代码语言:javascript
运行
复制
services.AddMvc(options =>
    {
        options.Filters.Add<BadRequestEmptyBodyFilter>();
    })
    .SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
    .ConfigureApiBehaviorOptions(options =>
    {
        options.SuppressModelStateInvalidFilter = true;
    });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63434660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档