Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 根据URL重定向ASP.NET中的网页_C#_Asp.net_Asp.net Mvc 3_Redirect - Fatal编程技术网

C# 根据URL重定向ASP.NET中的网页

C# 根据URL重定向ASP.NET中的网页,c#,asp.net,asp.net-mvc-3,redirect,C#,Asp.net,Asp.net Mvc 3,Redirect,我有一个域名叫mywebsite.com,但我更喜欢用户通过www子域访问我的网站 如何在asp.net mvc3中轻松实现验证和重定向 当我使用php时,我做了类似的事情: if($_SERVER['SERVER_NAME'] != "www.mywebsite.com") header('Location: www.mywebsite.com'); 我想找到一种类似的方法在asp.NETC中实现这种重定向。我不希望设置301重定向,而只是像我在PHP中使用的那样设置软重定向 我知

我有一个域名叫mywebsite.com,但我更喜欢用户通过www子域访问我的网站

如何在asp.net mvc3中轻松实现验证和重定向

当我使用php时,我做了类似的事情:

if($_SERVER['SERVER_NAME'] != "www.mywebsite.com")
     header('Location: www.mywebsite.com');
我想找到一种类似的方法在asp.NETC中实现这种重定向。我不希望设置301重定向,而只是像我在PHP中使用的那样设置软重定向

我知道,如果用户不在子域www.mywebsite.com上,我可以在我的每个控制器操作方法和重定向用户中进行验证,但我更愿意在验证和重定向后写一次,我找不到:/


非常感谢

你可以试试这样的东西

 if(!Request.Url.Host.Equals("www.mywebsite.com"))
 {
      Response.Redirect("website");
 }
您可以使用:

Request.Url.ToString()
这将返回URL,然后您可以快速检查它是否包含“www.”,如果为真,则重定向。不过,我建议您在IIS中的URL重写中处理此问题


按照此处的指南操作:这是为了让domain.com访问www.domain.com,但它的工作方式与之相反。

实际上,最初的问题专门要求“软”重定向201或202,而不是永久移动/找到301/302,因此我认为不是响应。重定向条件行应该是:

 if(!Request.Url.Host.Equals("www.mywebsite.com"))
 {
      HttpContext.Current.Response.Headers.Add("Location", "www.mywebsite.com");
 }
编辑:我相信状态也可以直接设置,与响应一起使用。重定向:

 if(!Request.Url.Host.Equals("www.mywebsite.com"))
 {
      HttpContext.Current.Response.Redirect("www.mywebsite.com");
      HttpContext.Current.Response.Status = "201 Created";
 }

如果您只想添加/附加标题信息,请使用


根据Ryan的回答,可以检查Request.Url.ToString属性以查找您要查找的Url

如果我在这里没有完全遗漏什么,您能否在IIS设置中为站点设置主机头,使其同时包含www.domain.com和domain.com

我将尝试通过IIS管理器访问IIS,因为我有一个共享的windows主机,但通常情况下它会正常运行,谢谢:如果无法通过面板访问,您可以让您的主机为您执行此操作,他们会这样做,因为这是一件非常基本的事情:我通过IIS管理器-Url重写模块进行了设置。有一个助手创建了一个新的规则,我只需要选择主域,它是重定向上的另一个!我知道我可以用这种方式验证主机,但是我可以把代码放在哪里呢?我不想复制/跳过或调用我所有控制器的每个操作方法中的方法:/Pot it in your master’s page Load我没有母版页,因为我正在执行MVC3 asp.net应用程序。因此,我只有共享视图而不是母版页:谢谢,这完全符合我的要求,但我是否必须将这段代码放在我所有控制器的每个操作方法中,或者我是否可以找到一个地方,在那里我只能放一次,它将控制所有控制器和操作,例如Global.asax?有几种实现方法这在经典的WebForms应用程序中,您可以创建一个继承自基本System.Web.UI.Page类的类,在Page_Load事件中实现此内容,并在创建的每个新页面上继承自此新类,而不是System.Web.UI.Page。您还可以实现一个HTTP模块来拦截所有HTTP请求,并在PostAcquireRequestState事件的处理程序上实现它!如果您还有任何问题,请随时提问。我目前正在使用这个片段:if!Request.Url.ToString.StartsWithwww{Response.AddHeaderLocation,+Request.RawUrl;}位于作为入口点的my Home Controller的索引方法中。但有时用户通过另一个控制器和/或操作到达我的网站,因此验证没有完成。