使用Web Api进行客户端验证

时间:2012-12-19 04:48:15

标签: asp.net-mvc entity-framework validation asp.net-web-api

我正在尝试对通过WebApi返回的对象执行客户端验证。我通过webapi将实体发送到我的实体编辑屏幕。我使用knockout将对象绑定到字段。

我已经有一个处理所有服务器端验证的动作过滤器。 如何在不必复制域模型数据注释的情况下合并客户端验证?

2 个答案:

答案 0 :(得分:1)

使用WebApi,您需要一些“粘合”代码来将从模型验证失败返回的错误连接到客户端验证器。

function extractErrors(jqXhr, validator) {
    var data = JSON.parse(jqXhr.responseText), // parse the response into a JavaScript object
        errors = {};

    $.each(data.ModelState, function (key, value) {
        var pieces = key.split('.');
        key = pieces[pieces.length - 1];
        errors[key] = value
    });

    validator.showErrors(errors); // show the errors using the validator object
}

在模型上,像往常一样注释:

[Required]
[Display(Name = "Group Name")]
public string Name { get; set; }

在视图中,添加ValidationMessageFor标记:

@Html.EditorFor(m => m.Name)
@Html.ValidationMessageFor(m => m.Name)

答案 1 :(得分:0)

当我创建HTTP API时,我将模型对象(DTO,请求模型等)放入一个单独的程序集中,我可以为.NET客户端分发。

考虑以下课程:

public abstract class UserUpdateRequestModel {

    [Required]
    [StringLength(50)]
    public string Name { get; set; }

    [Required]
    [EmailAddress]
    [StringLength(320)]
    public string Email { get; set; }
}

这是我在API中使用的内容:

public UserDto PutUser(Guid key, UserUpdateRequestModel requestModel) {

    // Do something here
}

例如,您可以在ASP.NET MVC客户端应用程序中使用相同的模型来生成具有验证data-属性的HTML输入,因为ASP.NET MVC有一种基于数据注释验证属性生成这些属性的方法。