猿问

模型绑定失败时的自定义响应 ASP.NET Core API

当模型绑定因数据类型不匹配而失败时,我想给出自定义响应。API


示例:当有人尝试将参数绑定string到GUID我的 API 中时,当前我收到以下响应。


    {

      "documentCategoryId": [

        "Error converting value \"string\" to type 'System.Guid'. Path 'documentCategoryId', line 2, position 32."

      ]

    }

相反,我想说的是,


处理错误


繁花不似锦
浏览 233回答 2
2回答

三国纷争

尝试使用FormatOutput如下方法自定义 BadRequest 响应:&nbsp;services.AddMvc()&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;.ConfigureApiBehaviorOptions(options =>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; options.InvalidModelStateResponseFactory = actionContext =>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return new BadRequestObjectResult(FormatOutput(actionContext.ModelState));&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; };&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; });FormatOutput根据您的想法定制方法。public List<Base> FormatOutput(ModelStateDictionary input)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; List<Base> baseResult = new List<Base>();&nbsp; &nbsp; &nbsp; &nbsp; foreach (var modelStateKey in input.Keys)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var modelStateVal = input[modelStateKey];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; foreach (ModelError error in modelStateVal.Errors)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Base basedata = new Base();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; basedata.Status = StatusCodes.Status400BadRequest;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; basedata.Field = modelStateKey;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; basedata.Message =error.ErrorMessage; // set the message you want&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; baseResult.Add(basedata);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; return baseResult;&nbsp; &nbsp; }&nbsp;public class Base{&nbsp; &nbsp; public int Status { get; set; }&nbsp; &nbsp; public string Field { get; set; }&nbsp; &nbsp; public string Message { get; set; }}

SMILET

要根据您的用例添加自定义响应,请在启动中添加以下代码services.Configure<ApiBehaviorOptions>(o =>{    o.InvalidModelStateResponseFactory = actionContext =>        new ResponseObject("403", "processing error");});其中ResponseObject是自定义类 class ResponseObject{   public string Status;   public string Message;   ResponseObject(string Status, string Message){     this.Status = Status;     this.Message= Message;   } }当模型绑定失败时 api 会返回这样的响应{ 状态:“403”,消息:“处理错误”}您可以根据需要自定义响应对象。
随时随地看视频慕课网APP
我要回答