剥离/Default.aspx
和//www
的代码无法正常工作(正如预期的那样):
protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext context = HttpContext.Current;
string url = context.Request.RawUrl.ToString();
bool doRedirect = false;
// remove > default.aspx
if (url.EndsWith("/default.aspx", StringComparison.OrdinalIgnoreCase))
{
url = url.Substring(0, url.Length - 12);
doRedirect = true;
}
// remove > www
if (url.Contains("//www"))
{
url = url.Replace("//www", "//");
doRedirect = true;
}
// redirect if necessary
if (doRedirect)
{
context.Response.Redirect(url);
}
}
它通常有效,但在提交表单(例如登录)时,上面的代码会对请求进行INTERCEPTS,然后重定向到同一页面。 示例:
~/SignIn/Default.aspx
~/SignIn/
~/SignIn/
转到~/SignIn/Default.aspx
并再次修复,从而取消了方法SignIn
的处理(这会将浏览器重定向到{{1} })并且页面重新加载为/SignIn/Success/
,并且没有登录。请帮忙。不确定这里有什么/如何解决。
这里的主要要求是:
从网址中移除~/SignIn/
和/Default.aspx
日Thnx
答案 0 :(得分:1)
这里的问题与GET和POST请求有关。当您致电Response.Redirect
时,您会指示客户端向您提供的网址发出新的GET请求。因此,如果您在请求的早期调用此类请求,例如实际上是POST请求的表单回发,则会丢失帖子。由于大多数POST应该在操作完成后自行重定向,因此仅将上面的逻辑应用于GET请求就足够了。
您可以使用Request.HttpMethod
访问请求方法(GET或POST)。