【发布时间】:2021-07-21 08:43:56
【问题描述】:
我创建了一个在我的整个 aspnet 项目中使用的服务,用于检索和验证标头以及其他内容。问题是异常过滤器无法捕获服务抛出的错误,因为它不在异常过滤器的范围内,从而给用户一个丑陋的内部服务器错误。有什么方法可以优雅地向使用服务的用户返回带有描述的参数错误?
初创公司:
services.AddScoped<UserService>();
services
.AddMvc(x =>
{
x.Filters.Add(typeof(Filters.MyExceptionFilter));
})
异常过滤器:
public class MyExceptionFilter : IExceptionFilter
{
public void OnException(ExceptionContext context)
{
if (context.Exception is ArgumentException argumentException)
{
var response = context.HttpContext.Response;
context.ExceptionHandled = true;
response.StatusCode = 400;
context.Result = new ObjectResult(argumentException.Message);
return;
}
}
}
服务:
public class UserService
{
public readonly string UserId;
public UserService(IHttpContextAccessor context)
{
if (!context.HttpContext.Request.Headers.TryGetValue("x-test", out var user))
{
throw new ArgumentException($"x-test header is required.");
}
UserId = user;
//do other stuff
}
}
控制器动作方法:
public async Task<IActionResult> Delete(string id,
[FromServices] UserService userService)
{
//do stuff
}
【问题讨论】:
标签: c# asp.net asp.net-core action-filter