首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何手动反序列化ModelStateDictionary

如何手动反序列化ModelStateDictionary
EN

Stack Overflow用户
提问于 2017-01-02 19:37:38
回答 0查看 1.9K关注 0票数 2

我正在尝试处理过滤器中的验证错误。验证响应格式应如下所示:

代码语言:javascript
复制
    {
        "message": "Validation errors in your request",
        "errors": {
            "email": [
                  "The Email is required"
                ],
            "Address": [
                  "The Address is required"
                ]
        }
    }

当我尝试执行以下操作时,在我的过滤器中:

代码语言:javascript
复制
public override void OnActionExecuting(ActionExecutingContext context)
{
    if (!context.ModelState.IsValid)
    {
        context.Result = new BadRequestObjectResult(context.ModelState);
    }
}

生成的响应格式为:

代码语言:javascript
复制
{
    "Email": [
          "The Email is required"
        ],
    "Address": [
          "The Address is required"
        ]
}

缺少message属性和errors信封。我尝试了很多方法,但都不起作用。例如:

代码语言:javascript
复制
public class ValidateModelAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext context)
        {
            if (!context.ModelState.IsValid)
            {
                var validationErrorResponse = new Dictionary<string, Object>();
                validationErrorResponse["message"] = "The request has validation errors";
                validationErrorResponse["errors"] = context.ModelState;
                context.Result = new BadRequestObjectResult(validationErrorResponse);
            }
        }
    }

但是response包含了模型字典的所有属性:

代码语言:javascript
复制
{
  "message": "The request has validation errors",
  "errors": {
    "Name": {
      "childNodes": null,
      "children": null,
      "key": "Name",
      "subKey": {
        "buffer": "Name",
        "offset": 0,
        "length": 4,
        "value": "Name",
        "hasValue": true
      },
      "isContainerNode": false,
      "rawValue": null,
      "attemptedValue": null,
      "errors": [
        {
          "exception": null,
          "errorMessage": "The Name field is required."
        }
      ],
      "validationState": 1
    }
  }
}
EN

回答

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41426112

复制
相关文章

相似问题

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