我有一个Web API项目,其中包含asp.net核心中的大量控制器、验证器、服务和存储库
我将禁用所有400个Bad requests消息正文(验证模型中的属性或...)基于安全性的生产方式探讨
如何在asp.net Core2.2中做到这一点?
发布于 2020-08-17 15:44:32
正如其他人在评论中指出的那样,这可能不是一个好主意,如果您的错误消息设计得当,它不太可能提高安全性。
但是,如果您仍然希望这样做,一种方法是实现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;
});
https://stackoverflow.com/questions/63434660
复制相似问题