c# – 如何自定义ASP.Net Core模型绑定错误?
发布时间:2020-12-15 08:20:19 所属栏目:百科 来源:网络整理
导读:我想从Web API( Asp.net Core 2.1)中仅返回标准化的错误响应,但我似乎无法弄清楚如何处理模型绑定错误. 该项目只是从“ASP.NET核心Web应用程序”创建的. “API”模板.我有一个简单的动作定义为: [Route("[controller]")][ApiController]public class MyTest
我想从Web API(
Asp.net Core 2.1)中仅返回标准化的错误响应,但我似乎无法弄清楚如何处理模型绑定错误.
该项目只是从“ASP.NET核心Web应用程序”>创建的. “API”模板.我有一个简单的动作定义为: [Route("[controller]")] [ApiController] public class MyTestController : ControllerBase { [HttpGet("{id}")] public ActionResult<TestModel> Get(Guid id) { return new TestModel() { Greeting = "Hello World!" }; } } public class TestModel { public string Greeting { get; set; } } 如果我使用无效的Guid(例如,https:// localhost:44303 / MyTest / asdf)向此操作发出请求,我会收到以下响应: { "id": [ "The value 'asdf' is not valid." ] } 我在Startup.Configure中有以下代码: public void Configure(IApplicationBuilder app,IHostingEnvironment env) { JsonErrorMiddleware.CreateSingleton(env); if (!env.IsDevelopment()) { app.UseHsts(); } app .UseHttpsRedirection() .UseStatusCodePages(async ctx => { await JsonErrorMiddleware.Instance.Invoke(ctx.HttpContext); }) .UseExceptionHandler(new ExceptionHandlerOptions() { ExceptionHandler = JsonErrorMiddleware.Instance.Invoke }) .UseMvc() } JsonErrorMiddleware只是一个类,它将错误转换为我想要返回的正确形状并将它们放入响应中.它根本没有被调用模型绑定错误(没有抛出Exception而且没有调用UseStatusCodePages). 如何挂钩模型绑定以在我的项目中的所有操作中提供标准化的错误响应? 我读了很多文章,但他们似乎都在讨论全局异常处理或验证错误. 解决方法
值得一提的是,ASP.NET Core 2.1添加了[ApiController]属性,除其他外,它通过返回传入ModelState的BadRequestObjectResult来自动处理模型验证错误.换句话说,如果用该属性装饰控制器,则不会更长时间需要执行if(!ModelState.IsValid)检查.
此外,该功能也是可扩展的.在Startup中,您可以添加: services.Configure<ApiBehaviorOptions>(o => { o.InvalidModelStateResponseFactory = actionContext => new BadRequestObjectResult(actionContext.ModelState); }); 以上就是默认情况下已经发生的事情,但您可以在那里自定义设置InvalidModelStateResponseFactory的lambda,以便返回您喜欢的任何内容. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |