0

是否有一种简单的方法可以使用 RedirectToAction 方法将 www 前缀添加到单个操作(或控制器)中?

我尝试使用 Redirect() 但给我一些其他问题。我认为它重新启动了会话。

更新:

我添加了一个实现这样的属性的类:

public class ExtendAttributes
{
    public class AddwwwPrefix : FilterAttribute, IAuthorizationFilter
    {
        public void OnAuthorization(AuthorizationContext filterContext)
        {

            string host = filterContext.HttpContext.Request.Url.Host;
            if (host.Contains("www."))
            {
                return; //It already contains www. so don't change it
            }
            else
            {
                host = "www." + filterContext.HttpContext.Request.Url.Host;
            }

            // redirect to HTTP  
            string url = "http://" + host + filterContext.HttpContext.Request.RawUrl;
            filterContext.Result = new RedirectResult(url);
        }
    } 
}

所以我可以这样使用它:

[ExtendAttributes.AddwwwPrefix]
   public ActionResult MyAction()
    {
      ...
4

1 回答 1

0

您可以配置 IIS 来实现这一点。

在绑定下,添加站点正在服务的所有主机名。

添加 HTTP 功能 URL 重写,并添加入站规则:

  • 匹配 URL:请求的 URL 使用正则表达式匹配模式

图案:(.*)

  • 条件匹配所有

输入 {HTTP_HOST} 与模式不匹配^www\..*

  • 动作动作类型重定向

重定向网址:http://(your target domain)/(R:1)

追加查询字符串,重定向类型Permanent (301)

根据您的需要进行调整。

于 2012-11-30T11:02:44.990 回答