欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【ASP.NET MVC :MVC页面验证与授权】,下面是详细的分享!
ASP.NET MVC :MVC页面验证与授权
在ASP.NET MVC中,如何来实现表单的验证与授权访问呢?至少在CTP3中,还没有一个官方的解决方案。ASP.NET WebForm的表单验证和授权机制是否适合在ASP.NET MVC中使用呢?带着这些问题来进入我们今天的主题。
在ASP.NET WebForm的架构下,我们可以通过一定的配置即可实现用户身份验证和授权。特别是在ASP.NET 2.0的Membership功能的支撑下,可以做到更加简洁可复用的用户验证系统。通过web.config可以做到对页面或目录对不同用户身份可见性的定制,但是它是基于物理文件和目录。而在ASP.NET MVC架构下,用户访问的每一个页面在磁盘中并没有一个固定的物理文件,它是通过Controller控制数据与视图的组合来生成HTML代码,进而向客户端输出。那么我们该如何来复用已有的表单验证授权机制呢?
在MVC中,请求的功能入口是Controller相应的Action函数,我们可以在函数执行前去控制请求权限。在ASP.NET MVC Preview 2后,提供了一个机制让我们可以对Action的AOP拦截,这个接口定义如下: public interface IActionFilter
| 以下为引用的内容: { void OnActionExecuted(ActionExecutedContext filterContext); void OnActionExecuting(ActionExecutingContext filterContext); void OnResultExecuted(ResultExecutedContext filterContext); void OnResultExecuting(ResultExecutingContext filterContext); } |
我们有两种方式来实现拦截,一种我们可以通过定义Attribute来实现拦截的功能,在System.Web.Mvc程序集中有一个ActionFilterAttribute抽象类,通过重写这个抽象类的这些虚方法,我们就可以实现对特定的执行过程进行拦截。
另一种方法,我们注意到Controller这个类也实现了IActionFilter这个接口,并且也提供了这四个函数的虚拟方法定义。框架内部,在调用Action方法的时候同时来调用这些拦截方法。具体的可以参考:ControllerActionInvoker 这个类的实现,所有的Action的调用都在这个类当中被实现。所以我们只要重写Controller里这四个虚方法,也可完成本Controller面的所有Action的拦截。
在这里,我也找到了国外友人已经实现好的基于角色的MVC权限控制的方案。
/// <summary>
/// Checks the User's authentication using FormsAuthentication
/// and redirects to the Login Url for the application on fail
/// </summary>
[RequiresAuthentication]
public class RequiresAuthenticationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//redirect if not authenticated
if (!filterContext.HttpContext.User.Identity.IsAuthenticated)
{
//use the current url for the redirect
string redirectOnSuccess=filterContext.HttpContext.Request.Url.AbsolutePath;
//send them off to the login page
string redirectUrl=string.Format("?ReturnUrl={0}", redirectOnSuccess);
string loginUrl=FormsAuthentication.LoginUrl + redirectUrl;
filterContext.HttpContext.Response.Redirect(loginUrl, true);
}
}
}
以上所分享的是关于ASP.NET MVC :MVC页面验证与授权,下面是编辑为你推荐的有价值的用户互动:
相关问题:asp.net mvc 如何关闭加载页面时的验证
答:刚进入页面的时候是GET请求的,增加一个判断,只有在post请求的时候才进行验证 if(!IsPostBack) { //验证代码 } >>详细
相关问题:asp.net mvc 实体验证的相关问题?
答:也是可以的,你自己写一个特性就行了,比如: public class NotEqualsAtrribute : ValidationAttribute { public string CompareFiled { get; private set; } public NotEqualsAtrribute(string compareField) : base("{0}与上一次输入相同!") ... >>详细
相关问题:asp.net mvc 中 cshtml页面中 正则验证Email “@” ...
答:1:用js文件!2:用2个@@ >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
