Asp.net mvc 将programmaticaly www.prefix添加到控制器操作
如果不存在www前缀,是否有一种使用RedirectToAction方法将其添加到单个操作(或控制器)的简单方法 我尝试使用Redirect(),但遇到了一些其他问题。我想它会重新启动会话 更新: 我添加了一个实现如下属性的类:Asp.net mvc 将programmaticaly www.prefix添加到控制器操作,asp.net-mvc,Asp.net Mvc,如果不存在www前缀,是否有一种使用RedirectToAction方法将其添加到单个操作(或控制器)的简单方法 我尝试使用Redirect(),但遇到了一些其他问题。我想它会重新启动会话 更新: 我添加了一个实现如下属性的类: public class ExtendAttributes { public class AddwwwPrefix : FilterAttribute, IAuthorizationFilter { public void OnAutho
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()
{
...
所以我可以这样使用它:
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()
{
...
您可以配置IIS来实现这一点 在“绑定”下,添加站点所服务的所有主机名 添加HTTP功能URL重写,并添加入站规则:
- 匹配URL:请求的URL使用正则表达式匹配模式
(.*)
- 所有条件都匹配
^www\..*
- 动作类型重定向
http://(您的目标域)/(R:1)
追加查询字符串,重定向类型永久(301)
根据您的需要进行调整。谢谢您的回答。问题是我没有访问IIS设置的权限。