Asp.Net中Ajax的Forms身份验证
2012-01-16 00:54
239 查看
本文不具体去演示Ajax中怎么结合Forms身份验证,只是讲解一个思路,希望能起到画龙点睛作用。
致力于Web开发的程序员对Ajax这个词是再熟悉不过了,同样致力于Asp.Net开发的程序员对Forms验证的应用也很熟悉。怎样在Ajax中应用Forms验证,你是否有自己的一套解决方法?
首先我们必须要对Ajax和Forms验证这两个技术的实现机制有一定的了解,而不是单纯的停留在应用的层面。因为做为一个.NET程序员很容易陷入一个拖控件,找控件思维模式,要想成为一名出色的Web程序员,停留在这样一个思维模式是很可怕的。废话不多说,下面就去介绍一下我的思路。
1.XMLHttpRequest无论是Get还是Post向Server端发送请求时都携带了一个URL,有了这个URL和其他Data,我们在Server端就能做出相应的处理,然后返回给Client端。
2.Forms验证,我们在Webconfig中对Server端的不同目录进行了Role和User授权,以达到我们的权限控制。
一.这里我们重点关心的就是Ajax请求的URL和Forms中的目录,或许你已经知道我要做什么了,那就是在Webconfig中对Ajax请求的URL进行配置。是的,接下来我们就去配置。
二.配置结束后我们经过测试,当Ajax向Server端发送请求时,用户身份过期/没有通过身份验证的情况下浏览器的页面并没有跳转到登陆页面。问题就出在XMLHttpRequest的身上,它并不接受我们在服务器端进行页面跳转然后做出回应。
三.这种情况下,就要在Asp.Net的请求管道上做点什么了。我们可以在global.asax 文件中或者自定义HttpModule进行处理。当我们截取到是一个Ajax请求时,而且没有通过身份验证时,我们就给XMLHttpRequest返回一个通知,通知它要跳转页面了。然后在Client端得到这个通知时,通过JS去实现跳转。
以上三步就是Ajax中应用Forms验证的一个思路,下面贴上简易的代码,我在HttpApplication的AuthenticateRequest事件中对Ajax的请求进行了处理,以达到Forms验证。
致力于Web开发的程序员对Ajax这个词是再熟悉不过了,同样致力于Asp.Net开发的程序员对Forms验证的应用也很熟悉。怎样在Ajax中应用Forms验证,你是否有自己的一套解决方法?
首先我们必须要对Ajax和Forms验证这两个技术的实现机制有一定的了解,而不是单纯的停留在应用的层面。因为做为一个.NET程序员很容易陷入一个拖控件,找控件思维模式,要想成为一名出色的Web程序员,停留在这样一个思维模式是很可怕的。废话不多说,下面就去介绍一下我的思路。
1.XMLHttpRequest无论是Get还是Post向Server端发送请求时都携带了一个URL,有了这个URL和其他Data,我们在Server端就能做出相应的处理,然后返回给Client端。
2.Forms验证,我们在Webconfig中对Server端的不同目录进行了Role和User授权,以达到我们的权限控制。
一.这里我们重点关心的就是Ajax请求的URL和Forms中的目录,或许你已经知道我要做什么了,那就是在Webconfig中对Ajax请求的URL进行配置。是的,接下来我们就去配置。
二.配置结束后我们经过测试,当Ajax向Server端发送请求时,用户身份过期/没有通过身份验证的情况下浏览器的页面并没有跳转到登陆页面。问题就出在XMLHttpRequest的身上,它并不接受我们在服务器端进行页面跳转然后做出回应。
三.这种情况下,就要在Asp.Net的请求管道上做点什么了。我们可以在global.asax 文件中或者自定义HttpModule进行处理。当我们截取到是一个Ajax请求时,而且没有通过身份验证时,我们就给XMLHttpRequest返回一个通知,通知它要跳转页面了。然后在Client端得到这个通知时,通过JS去实现跳转。
以上三步就是Ajax中应用Forms验证的一个思路,下面贴上简易的代码,我在HttpApplication的AuthenticateRequest事件中对Ajax的请求进行了处理,以达到Forms验证。
void context_AuthenticateRequest(object sender, EventArgs e) { HttpApplication app = (HttpApplication)sender; HttpContext context = app.Context; //当没有通过身份验证时,Forms验证机制都会让请求跳转到登陆页面,这时候就要进行处理了 if (!String.IsNullOrEmpty(context.Request.Params["ReturnUrl"]) && context.Request.RawUrl.StartsWith("/Login.html?")) { string loginUrl = String.Empty; string returnUrl = context.Request.Params["ReturnUrl"]; //是否要进行跳转的标识 bool isRedirect = true; if (returnUrl.EndsWith(".aj", StringComparison.OrdinalIgnoreCase)) { //当检测到是Ajax请求时,不让页面去跳转,而是返回给Client一个跳转的URL isRedirect = false; returnUrl = returnUrl.Substring(0, returnUrl.LastIndexOf("/")) + ".html"; } loginUrl = String.Format("{0}?ReturnUrl={1}", loginUrl, HttpUtility.UrlEncode(returnUrl)); //结束本次的请求 app.CompleteRequest(); if (!isRedirect)//Ajax请求 { context.Response.ContentType = "text/xml"; context.Response.ContentEncoding = System.Text.Encoding.UTF8; context.Response.Write("ResponseRedirect:" + loginUrl); } else//非Ajax请求,跳转页面 context.Response.Redirect(loginUrl); } }
相关文章推荐
- Asp.Net二级域名共享Forms身份验证、下载站/图片站的授权访问控制
- Asp.Net二级域名共享Forms身份验证、下载站/图片站的授权访问控制
- asp.net Forms身份验证和基于角色的权限访问
- ASP.NET 下web.config Forms身份验证的配置
- asp.net Forms 身份验证 html页面
- Asp.net的身份验证之Forms身份验证 (一):
- 用ASP.Net Forms模式实现WebService身份验证
- Asp.Net二级域名共享Forms身份验证、下载站/图片站的授权访问控制
- asp.net Forms身份验证详解
- asp.net登录 用Forms身份验证和基于角色的分目录访问
- 【转】使用ASP.Net Forms模式实现WebService身份验证
- asp.net中使用基于角色的身份Forms验证 (2)
- asp.net Forms(表单)身份验证
- asp.net forms身份验证,避免重复造轮子
- Asp.net Forms身份验证
- asp.net forms 身份验证方式下跨域登录信息共享的实现方法
- 使用ASP.Net Forms模式实现WebService身份验证
- Asp.net的身份验证之Forms身份验证 (二)
- 深入剖析 ASP.NET 1.x 中 Forms 身份验证(1)
- asp.net中使用基于角色的身份Forms验证 (3)