第一步修改 实体模型
public class UserInfo
{
public int Id { getset}
[Required]
[StringLength(20,ErrorMessage="名字太长了或者太短了",MinimumLength=4)]
public string Name { getset}
[RegularExpression(@"([2-5]\d)",ErrorMessage="年龄在20-50之间")]
public int Age { getset}
}
复制代码
注意:需要添加 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
<link href="Content/Site.css" rel="stylesheet" type="text/css" />
<script src="Scripts/jquery-1.7.1.min.js" type="text/javascript"></script>
<script src="Scripts/knockout-2.1.0.js" type="text/javascript"></script>
<script src="Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
拷贝HTMLPage2的内容稍作修改
复制代码
<label for="text">
名称</label>
<input id="name" name="name" data-val="true" data-val-required="是不是忘记输入名称了?" type="text"
value="" />
<span class="field-validation-valid" data-valmsg-for="name" data-valmsg-replace="true">
</span>
<label for="text">
年龄</label>
<input id="age" name="age" type="text" data-val="true" data-val-required="年龄也是必须输入的哦!"
value="" />
<span class="field-validation-valid" data-valmsg-for="age" data-valmsg-replace="true">
</span>
<br />
<button type="submit">
Submit</button>
复制代码
增加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(serverValidathttp://www.yingtaow.com/sitemap.xml?ionErrors, 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)
}
浏览测试得到效果
1 没有任何输入
2 输入不合法
本篇完整代码:/Files/risk/web api 5/MvcApplication1.rar
public class RegisterController : ApiController
02
{private ApplicationUserManager UserManager
03
{get
04
{return Request.GetOwinContext().GetUserManager<ApplicationUserManager>()
05
}
06
}public IHttpActionResult Post(RegisterApiModel model)
07
{if (!ModelState.IsValid)
08
{return BadRequest(ModelState)
09
}var user = new ApplicationUser
10
{
11
Email = model.Email,
12
UserName = model.Email,
13
EmailConfirmed = true
14
}
15
var result = UserManager.Create(user, model.Password)
16
return result.Succeeded ? Ok() : GetErrorResult(result)
17
}
18
private IHttpActionResult GetErrorResult(IdentityResult result)
19
{
20
if (result == null)
21
{
22
return InternalServerError()
23
}
24
if (result.Errors != null)
25
{
26
foreach (var error in result.Errors)
27
{
28
ModelState.AddModelError("", error)
29
}
30
}
31
if (ModelState.IsValid)
32
{
33
// No ModelState errors are available to send, so just return an empty BadRequest.
34
return BadRequest()
35
}
36
return BadRequest(ModelState)
37
}
38
}
首先,mvc开发的是web应用,web应用中, 一般使用cookie或者session来进行身份验证。
参考:http://my.oschina.net/xianggao/blog/395675 介绍了cookie和session的概念和作用,
简单的说,Cookie是客户端记录的信息, Session是服务器记录的信息, 而身份验证需要使用的就是Cookie或者Session。
所以,mvc做身份验证(登录),第一步是验证身份,然后颁发给用户cookie或者session,
如:
//控制器代码:[HttpPost]
public ActionResult Login()
{
//...登录验证,
if(用户名密码正确)
{
Session["UserId"] = "100" //这里举的是最简单的例子,即记录用户的ID
}
}
那么记录了之后, 服务器就知道,这个人是ID = “100"的那个用户了,然后就是验证了。
在MVC中,一般使用FIlter来控制用户的权限,即某个Action需要怎么样的权限、或者指定某个用户才能进行访问,否则返回一个错误。
一般会重写过滤器, 在你的MVC项目中新建一个类:
public class MyAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute//继承mvc自带的AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if(httpContext.Session["UserId"]!=null)
{
if(httpContext.Session["UserId"]=="100"}
{
return true
}
else
{
return false
}
}
return false
}
}
这个过滤器很简单, 如果Session["UserId"] =="100"的时候,才会通过(返回true),其他都不允许通过。
最后一步,就是给需要验证身份的控制器加上这个过滤器即可。
[Authorize]//这个就是验证身份的, 如果用户没有登录,或者UserId不等于100,
系统会禁止他进入Index的界面
public ActionResult Index()
{
Return View()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)