1:表单验证
[ValidateInput]
//[ValidateInput(true)]//默认为真表示阻止脚本提交
//[ValidateInput]//允许表单脚本提交
public ActionResult test()
{
//设置登录
FormsAuthentication.SetAuthCookie("aaa", false);
return View();
}
2:CSRF攻击(远程表单非法提交)
[ValidateAntiForgeryToken]
HTML界面:
@using (Html.BeginForm("default1", "test", FormMethod.Post))
{
@Html.AntiForgeryToken()
<input id="Submit1" type="submit" value="submit" />
}
<a href="default2">连接</a>
CS界面
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult default1()
{
return View();
}
3:用户角色验证
[Authorize]
一般我们都是自定义角色验证
CS——model代码
public class MyAuthAttribute : AuthorizeAttribute
{
// 只需重载此方法,模拟自定义的角色授权机制
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
string currentRole = GetRole(httpContext.User.Identity.Name);
if (Roles.Contains(currentRole))
return true;
// return false;
return base.AuthorizeCore(httpContext);
}
// 返回用户对应的角色, 在实际中, 可以从SQL数据库中读取用户的角色信息
private string GetRole(string name)
{
switch (name)
{
case "aaa": return "User";
case "bbb": return "Admin";
case "ccc": return "God";
default: return "Fool";
}
}
}
cs代码Controllers
public ActionResult test()
{
//模拟表单登录
FormsAuthentication.SetAuthCookie("aaa", false);
return View();
}
[MyAuth]
public ActionResult default2()
{
return View();
}
4:子窗体(嵌入窗体)
[ChildActionOnly]
CS代码:
[ChildActionOnly]
public ActionResult default1()
{
return PartialView();
}
HTML代码:
@using (Html.BeginForm())
{
@Html.Action("default1");
}
[ValidateInput]
//[ValidateInput(true)]//默认为真表示阻止脚本提交
//[ValidateInput]//允许表单脚本提交
public ActionResult test()
{
//设置登录
FormsAuthentication.SetAuthCookie("aaa", false);
return View();
}
2:CSRF攻击(远程表单非法提交)
[ValidateAntiForgeryToken]
HTML界面:
@using (Html.BeginForm("default1", "test", FormMethod.Post))
{
@Html.AntiForgeryToken()
<input id="Submit1" type="submit" value="submit" />
}
<a href="default2">连接</a>
CS界面
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult default1()
{
return View();
}
3:用户角色验证
[Authorize]
一般我们都是自定义角色验证
CS——model代码
public class MyAuthAttribute : AuthorizeAttribute
{
// 只需重载此方法,模拟自定义的角色授权机制
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
string currentRole = GetRole(httpContext.User.Identity.Name);
if (Roles.Contains(currentRole))
return true;
// return false;
return base.AuthorizeCore(httpContext);
}
// 返回用户对应的角色, 在实际中, 可以从SQL数据库中读取用户的角色信息
private string GetRole(string name)
{
switch (name)
{
case "aaa": return "User";
case "bbb": return "Admin";
case "ccc": return "God";
default: return "Fool";
}
}
}
cs代码Controllers
public ActionResult test()
{
//模拟表单登录
FormsAuthentication.SetAuthCookie("aaa", false);
return View();
}
[MyAuth]
public ActionResult default2()
{
return View();
}
4:子窗体(嵌入窗体)
[ChildActionOnly]
CS代码:
[ChildActionOnly]
public ActionResult default1()
{
return PartialView();
}
HTML代码:
@using (Html.BeginForm())
{
@Html.Action("default1");
}
本文详细介绍了ASP.NET中的表单验证机制,包括ValidateInput属性的使用、防止CSRF攻击的@Html.AntiForgeryToken()方法,以及如何实现用户角色验证。同时,通过实例展示了如何自定义角色验证逻辑,并探讨了子窗体的概念及其应用。
578

被折叠的 条评论
为什么被折叠?



