我正在尝试找到一个很好的通用方法来规范化ASP.NET MVC 2应用程序中的URL.这是我到目前为止所提出的:
// Using an authorization filter because it is executed earlier than other filters
public class CanonicalizeAttribute : AuthorizeAttribute
{
public bool ForceLowerCase { get;set; }
public CanonicalizeAttribute()
: base()
{
ForceLowerCase = true;
}
public override void OnAuthorization(AuthorizationContext filterContext)
{
RouteValueDictionary values = ExtractRouteValues(filterContext);
string canonicalUrl = new UrlHelper(filterContext.RequestContext).RouteUrl(values);
if (ForceLowerCase)
canonicalUrl = canonicalUrl.ToLower();
if (filterContext.HttpContext.Request.Url.PathAndQuery != canonicalUrl)
filterContext.Result = new PermanentRedirectResult(canonicalUrl);
}
private static RouteValueDictionary ExtractRouteValues(AuthorizationContext filterContext)
{
var values = filterContext.RouteData.Values.Union(filterContext.RouteData.DataTokens).ToDictionary(x => x.Key, x => …Run Code Online (Sandbox Code Playgroud) 如何在ASP.NET MVC中执行HTTP 301永久重定向路由?
所以我有一个像这样的ActionName:
[ActionName("Chicago-Bears")]
public ActionResult ChicagoBears() {
return View();
}
Run Code Online (Sandbox Code Playgroud)
谷歌的索引为:http://www.example.com/Teams/ChicagoBears
我坚持使用IIS6并且自己无法访问IIS.
当然,现在它有一个连字符.因此,如果有人点击该链接,Google会显示404.
如何在此实例中设置301重定向?我无法创建另一个名为ChicagoBears()的方法,所以......
多谢你们.