UriBuilder指向localhost而不是域名

本文关键字:域名 指向 localhost UriBuilder | 更新日期: 2024-10-24 19:44:31

我的网站有一个由http访问的公共部分和一个需要登录的https部分。当注销网站时,它会重定向到http公共索引页面。

以前我也这样做过,说明完整的网址指向。最近我不得不去掉这些东西,这样网站就可以在许多域上运行,进行测试。

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

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

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

UriBuilder指向localhost而不是域名

如果不指定主机,将使用默认主机("localhost")-请参阅MSDN上的UriBuilder()构造函数文章。

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

 ub.Host = GetMeIncomingHost();

因为在重定向到的URI中,您没有指定权限(主机)。因此,您的重定向发送一个302 Found HTTP状态,并且响应包含一个类似于以下内容的location:标头:

location: /html/index.html

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

要解决此问题,请在UriBuilder的构造函数中为其添加HttpContext.Current.Request.Url。应该这样做:

UriBuilder ub = new UriBuilder( HttpContext.Current.Request.Url );
ub.Path   = "/html/index.html";
Response.Redirect(ub.Uri.ToString(), true);