UriBuilder指向localhost而不是域名

时间:2013-12-16 19:34:14

标签: c# asp.net uribuilder

我的网站有一个公共部分,可通过http和https部分访问,以便登录。退出网站时,它会重定向到http公共索引页。

之前我已经完成了这个,并说明了完整的网址。最近我不得不摆脱这些东西,以便网站可以在众多域上运行,进行测试。

我尝试使用UriBuilder将https链接转换为http链接,以便网站不再需要使用直接指向特定网址。这应该允许网站使用任何域名。现在它指向计算机名称。

if (Request.IsSecureConnection)
{
    UriBuilder ub = new UriBuilder();
    ub.Path = "/html/index.html";
    ub.Scheme = Uri.UriSchemeHttp;
    ub.Port = -1; // use default port for scheme
    Response.Redirect(ub.Uri.ToString(), true);

    //An old direct link to the site
    //Response.Redirect("http://www.someaddress.com/html/index.html");
}

当代码在测试服务器上远程触发而不是指向正确的域时,它会将我返回到地址

http://localhost/html/index.html

而不是

http://testserver/html/index.html

我不知道为什么要这样做,而不是通过返回我连接到服务器的地址。

2 个答案:

答案 0 :(得分:0)

如果您未指定主机,则使用默认主机("localhost") - 请参阅MSDN上的UriBuilder() constructor文章。

修复:指定主机(可能基于传入请求的主机)。

 ub.Host = GetMeIncomingHost();

答案 1 :(得分:0)

因为在您要重定向的URI中,您尚未指定权限(主机)。因此,您的重定向会发送302 Found HTTP状态,并且响应包含location:标头,如下所示:

location: /html/index.html

这是一个 relative URI,相对于重定向请求所源自的当前URI。这意味着它继承了请求页面的方案和权限组件(显然,在您的情况下,它是http://localhost:xx/...

要解决此问题,请使用HttpContext.Current.Request.UrlUriBuilder的构造函数中播种UriBuilder ub = new UriBuilder( HttpContext.Current.Request.Url ); ub.Path = "/html/index.html"; Response.Redirect(ub.Uri.ToString(), true); 。应该这样做:

{{1}}