表单身份validation添加其他信息以及ReturnUrl

使用表单身份validation,当应用程序需要重定向到登录页面时,是否有一个事件或任何可扩展点,可以让我在重定向到登录页面之前对请求执行其他工作?

我想在查询字符串中发送可能不同的其他信息,以便在web.config中的loginUrl节点的链接中静态嵌入它。

编辑:为了澄清,我想在重定向到登录页面之前拦截请求。

例:

   

在用户被重定向到http://the/interwebs/login.aspx之前,我希望能够打包查询值,这样url可能会结束像http://the/interwebs/login.aspx?Action =刷新

我以前用http模块完成了这个。 我的例子(剥离),在vb.net中。 我只是检查401状态代码并进行自己的重定向。 这里的一个大技巧是我必须删除并添加回web.config httpModules以确保我的httpmodule从url授权模块中介入。 在我的情况下,我有一些URL重写本地化,我需要将区域设置ID发送到登录页面,因为它被url授权模块中的正常重定向丢失。 我大量使用Reflector来构建基本路径(未显示),因为这些是私有方法。

  Public Sub Init(ByVal context As System.Web.HttpApplication) Implements System.Web.IHttpModule.Init AddHandler context.EndRequest, AddressOf Context_EndRequest End Sub Private Sub Context_EndRequest(ByVal sender As Object, ByVal e As EventArgs) If TypeOf sender Is HttpApplication Then Dim hApplication As HttpApplication = DirectCast(sender, HttpApplication) Dim hContext As HttpContext = hApplication.Context If (hContext.Response.StatusCode = &H191) Then hContext.Response.Redirect(String.Format("{0}?ReturnUrl={1}&someparam2={2}", basepath, HttpUtility.UrlEncode(hContext.Request.RawUrl), someparam2)) End If End If End Sub 

web.config更改

               

您可以通过处理事件HttpApplication.AuthenticateRequest来完成此操作

  private void Application_AuthenticateRequest(Object source, EventArgs e) { HttpApplication application = (HttpApplication)source; HttpContext context = application.Context; string cookieName = FormsAuthentication.FormsCookieName; HttpCookie authCookie = context.Request.Cookies[cookieName]; if (authCookie == null || string.IsNullOrEmpty(authCookie.Value)) { //... do something } 

仅供参考,我们目前通过IHttpModule实现这样做。

您不必使用Forms身份validation的机制将人员重定向到URL。 你可以在代码中做到这一点。 只需在其中签名并使用Response.Redirect重定向它们。