【发布时间】:2014-01-15 21:13:13
【问题描述】:
我正在 Visual Studio 2013 中开发 Web 表单应用程序,并希望将 URL 设为小写。
例如:
到
我找到的所有解决方案都是通过 IIS 重写规则,但我想在项目本身中解决它。
【问题讨论】:
我正在 Visual Studio 2013 中开发 Web 表单应用程序,并希望将 URL 设为小写。
例如:
到
我找到的所有解决方案都是通过 IIS 重写规则,但我想在项目本身中解决它。
【问题讨论】:
在 BeginRequest 上的 global.asax 上,您只需进行检查,然后重定向为:
protected void Application_BeginRequest(Object sender, EventArgs e)
{
// place the lower case on string, to avoid make it again later.
string cTheLowerUrl = HttpContext.Current.Request.Path.ToLowerInvariant();
if (cTheLowerUrl != HttpContext.Current.Request.Path)
{
HttpContext.Current.Response.Redirect(cTheLowerUrl + HttpContext.Current.Request.Url.Query);
}
}
您还可以检查要强制执行该规则的文件,例如仅检查 aspx 文件:
string sExtOfFile = System.IO.Path.GetExtension(HttpContext.Current.Request.Path);
if (sExtOfFile.Equals(".aspx", StringComparison.InvariantCultureIgnoreCase))
{
string cTheLowerUrl = HttpContext.Current.Request.Path.ToLowerInvariant();
if (cTheLowerUrl != HttpContext.Current.Request.Path)
{
HttpContext.Current.Response.Redirect(cTheLowerUrl + HttpContext.Current.Request.Url.Query);
}
}
asp.net 4 版本可以直接使用HttpResponse.RedirectPermanent
对于 asp.net 3.5 版本以及在我使用 asp.net 进行类似重定向但带有 301 Moved Permanently 响应之前:
public static void RedirectPermanent(string url, bool endResponse = true)
{
HttpResponse responce = HttpContext.Current.Response;
#if DEBUG
if (url == null)
{
throw new ArgumentNullException("url");
}
if (responce == null)
{
throw new ArgumentNullException("url");
}
if (url.IndexOf('\n') >= 0)
{
throw new ArgumentException("Cannot_redirect_to_newline");
}
Page handler = HttpContext.Current.Handler as Page;
if ((handler != null) && handler.IsCallback)
{
throw new ApplicationException("Redirect_not_allowed_in_callback");
}
#endif
url = responce.ApplyAppPathModifier(url);
responce.Clear();
responce.TrySkipIisCustomErrors = true;
responce.StatusCode = 301;
responce.Status = "301 Moved Permanently";
responce.RedirectLocation = url;
// a direct header diferent way
// responce.AddHeader("Location", url);
responce.Write("<html><head><title>Object moved</title></head><body>\r\n");
responce.Write("<h2>Object moved to <a href=\"" + url + "\">here</a>.</h2>\r\n");
responce.Write("</body></html>\r\n");
if (endResponse)
{
responce.End();
}
}
protected void Application_BeginRequest(Object sender, EventArgs e) 上的代码将是:
string sExtOfFile = System.IO.Path.GetExtension(HttpContext.Current.Request.Path);
if (sExtOfFile.Equals(".aspx", StringComparison.InvariantCultureIgnoreCase))
{
string cTheLowerUrl = HttpContext.Current.Request.Path.ToLowerInvariant();
if (cTheLowerUrl != HttpContext.Current.Request.Path)
{
// for asp.net 4 and above
HttpContext.Current.Response.RedirectPermanent(cTheLowerUrl + HttpContext.Current.Request.Url.Query);
// or using the above function.
// RedirectPermanent(cTheLowerUrl + HttpContext.Current.Request.Url.Query);
}
}
我第一次测试它并且正在运行,比制定规则更快,并且你可以更直接地控制它。
【讨论】: