首页 新闻 会员 周边 捐助

内外网端口映射不一致问题导致response.redirect跳转问题

0
悬赏园豆:100 [已解决问题] 解决于 2016-10-29 10:17

我外网端口是9004,映射 到内网服务器的端口是80,那么我通过 外网访问网址

如,http://*******:9004/index.aspx,在这个页面里有一个response.redirect跳转到

response.redirect("a.aspx");希望能够跳转到http://******:9004/a.aspx,可结果是跳转到http://*****:80/a.aspx,根据 内网映射的端口了,这个有什么解决办法,我看网上说可以在web.config中配置就可以了,但没有明说配置什么,各位大牛们有碰到过类似 问题,有解决办法吗?

李.net的主页 李.net | 小虾三级 | 园豆:730
提问于:2016-10-26 20:12
< >
分享
最佳答案
1

<httpRuntime useFullyQualifiedRedirectUrl="false" />

收获园豆:100
Daniel Cai | 专家六级 |园豆:10424 | 2016-10-27 15:44
其他回答(3)
0

没有这么神奇的配置的。内网站点也部署到9004端口咯

 

response.redirect 是这样实现的。看名字也知道了

public string ApplyAppPathModifier(string virtualPath)
        {
            CookielessHelperClass arg_0B_0 = this._context.CookielessHelper;
            if (virtualPath == null)
            {
                return null;
            }
            if (UrlPath.IsRelativeUrl(virtualPath))
            {
                virtualPath = UrlPath.Combine(this.Request.ClientBaseDir.VirtualPathString, virtualPath);
            }
            else
            {
                if (!UrlPath.IsRooted(virtualPath) || virtualPath.StartsWith("//", StringComparison.Ordinal))
                {
                    return virtualPath;
                }
                virtualPath = UrlPath.Reduce(virtualPath);
            }
            if (this._appPathModifier == null || virtualPath.IndexOf(this._appPathModifier, StringComparison.Ordinal) >= 0)
            {
                return virtualPath;
            }
            string appDomainAppVirtualPathString = HttpRuntime.AppDomainAppVirtualPathString;
            int num = appDomainAppVirtualPathString.Length;
            bool flag = virtualPath.Length == appDomainAppVirtualPathString.Length - 1;
            if (flag)
            {
                num--;
            }
            if (virtualPath.Length < num)
            {
                return virtualPath;
            }
            if (!StringUtil.EqualsIgnoreCase(virtualPath, 0, appDomainAppVirtualPathString, 0, num))
            {
                return virtualPath;
            }
            if (flag)
            {
                virtualPath += "/";
            }
            if (virtualPath.Length == appDomainAppVirtualPathString.Length)
            {
                virtualPath = virtualPath.Substring(0, appDomainAppVirtualPathString.Length) + this._appPathModifier + "/";
            }
            else
            {
                virtualPath = virtualPath.Substring(0, appDomainAppVirtualPathString.Length) + this._appPathModifier + "/" + virtualPath.Substring(appDomainAppVirtualPathString.Length);
            }
            return virtualPath;
        }
private string ConvertToFullyQualifiedRedirectUrlIfRequired(string url)
        {
            HttpRuntimeSection httpRuntime = RuntimeConfig.GetConfig(this._context).HttpRuntime;
            if (httpRuntime.UseFullyQualifiedRedirectUrl || (this.Request != null && this.Request.Browser["requiresFullyQualifiedRedirectUrl"] == "true"))
            {
                return new Uri(this.Request.Url, url).AbsoluteUri;
            }
            return url;
        }

 

czd890 | 园豆:14488 (专家六级) | 2016-10-27 00:09
0

重定向的不是服务器重定向,是发送301,客户端通过Location二次定向;

既然是这样,可是你却写相对地址,那么.net哪里知道你真实的目的地,肯定只要写相对都按照自身默认的进行组装。

因此办法你也知道了,但是你可能又觉得有的地方(可能不止一次这么用)这么直接改太不爽了,那又怎么干既保持原有,又可以自己决定呢——你可以写个扩展函数,比如叫RedirectAbsolute()

花飘水流兮 | 园豆:13615 (专家六级) | 2016-10-27 09:24
0

不能用绝对地址么

JackWang-CUMT | 园豆:2866 (老鸟四级) | 2016-10-27 14:00
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册