Asp.net Form验证后造成URL参数重复的问题

文章详细介绍了在ASP.NET网站开发中如何实现基于Forms验证的登录功能,包括如何在Web.config中配置认证节点以实现在用户未登录或登录超时时自动跳转到登录页面。同时,文章提供了解决在获取登录页面跳转URL时出现参数重复问题的方法,通过解析URL路径和查询字符串来获取不含重复参数的URL。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


  

开发Asp.net网站, 开发网站使用Form验证, 需要在Web.config中加入如下节点

    

     < authentication  mode ="Forms" >
       < forms  loginUrl ="~/Public/Login"  timeout ="30"   />
     </ authentication >

打开带有参数的页面时,如果未登录或登录已超时,会自动跳转到Login页面, 但是当输入完用户名密码后, 如果使用 this.HttpContext.Request.UrlReferrer 获取之前的页面就会发现获取到的Url中包含重复的参数列表.
至于为什么会出现重复,可以参考:
 http://blogs.msdn.com/b/vijaysk/archive/2008/01/24/anatomy-of-forms-authentication-return-url.aspx 

可以这样获得没有重复的Url:

  
var urlPathAndQuery =  this.HttpContext.Request.UrlReferrer.PathAndQuery;
var returnUrlIndex = urlPathAndQuery.IndexOf( " ReturnUrl= ");
if (returnUrlIndex > - 1)
{
     var parameterIndex = urlPathAndQuery.IndexOf( " & ");
     string returnUrl = parameterIndex == - 1 ? urlPathAndQuery.Substring(returnUrlIndex +  10) : urlPathAndQuery.Substring(returnUrlIndex +  10, parameterIndex - (returnUrlIndex +  10));
    returnUrl = Server.UrlDecode(returnUrl);
     bool isNotLogoutUrl = returnUrl.IndexOf( " Logout ") == - 1;
     if (isNotLogoutUrl)
    {
         return returnUrl;
    }
}  


 

转载于:https://www.cnblogs.com/JasonBie/archive/2012/11/29/2795116.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值