Bri*_*Kim 5 asp.net webforms forms-authentication url-rewriting returnurl
我有一个包含多个.aspx页面的文件夹,我想限制访问.我已将web.config添加到该文件夹中<deny users="?"/>
.
问题是当我使用UrlRewrite时,ReturnUrl是使用.aspx文件的物理路径自动生成的.
有没有办法在不进行手动身份验证检查和重定向的情况下操作ReturnUrl?有没有办法从代码隐藏或web.config设置ReturnUrl?
编辑:该应用程序使用ASP.NET 2.0 WebForms.我不能使用3.5路由.
编辑2:似乎从未捕获401状态代码.它为受保护的页面返回302,并使用ReturnUrl重定向到登录页面.它不会为受保护的页面返回401.嗯......有趣...参考:http://msdn.microsoft.com/en-us/library/aa480476.aspx
这使事情变得更难......我可能必须写反向重写映射规则到正则表达式匹配ReturnUrl并替换它如果它不返回401 ...如果它确实返回401我可以将RawUrl设置为Response.RedirectLocation或替换ReturnUrl与RawUrl.
其他人还有其他想法吗?
我最终检查了 Url 中是否存在 ReturnUrl,并在 Global.asax 的 EndRequest 阶段将其替换为 RawUrl。这目前对我有用......
这篇博文帮助我进行了设置。
protected void Application_EndRequest(object sender, EventArgs e)
{
string redirectUrl = this.Response.RedirectLocation;
if (!this.Request.RawUrl.Contains("ReturnUrl=") && !string.IsNullOrEmpty(redirectUrl))
{
this.Response.RedirectLocation = Regex.Replace(redirectUrl, "ReturnUrl=(?'url'[^&]*)", delegate(Match m)
{
return string.Format("ReturnUrl={0}", HttpUtility.UrlEncode(this.Request.RawUrl));
}, RegexOptions.Singleline | RegexOptions.IgnoreCase | RegexOptions.ExplicitCapture);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5714 次 |
最近记录: |