我的网站有一个公共部分,可通过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
我不知道为什么要这样做,而不是通过返回我连接到服务器的地址。
答案 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.Url
在UriBuilder
的构造函数中播种UriBuilder ub = new UriBuilder( HttpContext.Current.Request.Url );
ub.Path = "/html/index.html";
Response.Redirect(ub.Uri.ToString(), true);
。应该这样做:
{{1}}