如何使用 Web API 来对 MVC 应用程序进行身份验证

2025-04-24 02:53:48
推荐回答(1个)
回答1:

第一步修改 实体模型

public class UserInfo
{
public int Id { get; set; }
[Required]
[StringLength(20,ErrorMessage="名字太长了或者太短了",MinimumLength=4)]
public string Name { get; set; }

[RegularExpression(@"([2-5]\d)",ErrorMessage="年龄在20-50之间")]
public int Age { get; set; }
}

注意:需要添加 System.ComponentModel.DataAnnotations; 引用
第二步增加Filter

public class ValidationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.BadRequest,
actionContext.ModelState);
}
}
}

注意:需要引入命名空间

using System.Web;
using System.Web.Http.Filters;
using System.Web.Http.ModelBinding;
using System.Web.Http.Controllers;
using System.Net.Http;
using System.Net;
using Newtonsoft.Json.Linq;

第三步 注册Filter
打开 webApiConfig
添加代码

config.Filters.Add(new Filters.ValidationAttribute());

第四步 编写页面
引入js/CSS






拷贝HTMLPage2的内容稍作修改


value="" />



value="" />






增加js,这段js是将服务返回的错误消息进行显示

$.validator.addMethod("failure", function () { return false; });
$.validator.unobtrusive.adapters.addBool("failure");
$.validator.unobtrusive.revalidate = function (form, validationResult) {
$.removeData(form[0], 'validator');
var serverValidationErrors = [];
for (var property in validationResult) {
var elementId = property.toLowerCase();
elementId = elementId.substr(elementId.indexOf('.') + 1);
var item = form.find('#' + elementId);
serverValidationErrors.push(item);
item.attr('data-val-failure', validationResult[property][0]);
jQuery.validator.unobtrusive.parseElement(item[0]);
}
form.valid();
$.removeData(form[0], 'validator');
$.each(serverValidationErrors, function () {
this.removeAttr('data-val-failure');
jQuery.validator.unobtrusive.parseElement(this[0]);
});
}

增加服务器返回错误消息显示操作
400 /* BadRequest */: function (jqxhr) {
var validationResult = $.parseJSON(jqxhr.responseText);
$.validator.unobtrusive.revalidate(form, validationResult.ModelState);
}