内外网端口映射不一致 导致博易页面链接端口不对的问题

部署了博易,用FRP做了内网穿透,内网8080端口,外网80,发现页面上很多链接都是内网的端口,

网上搜了一下,在web.config添加如下配置:

<appSettings>
<add key="aspnet:UseHostHeaderForRequestUrl" value="false" />
</appSettings>
实测没有效果,还是一样的。

找不到其它办法,只能改源代码了。

第一步,在web.config里添加一个配置项:

<appSettings>

<!-- 端口映射,内网穿透等的前端端口 -->
<add key="BlogEngine.MappingPort" value="80"/>    

</appSettings>
第二步,在 BlogEngine.Core.BlogConfig 类里添加属性,

代码里的两个问号注意改成半角的,博易的文章里有两个半角问号会出错。

    #region MappingPort
    /// <summary>
    /// 端口映射,内网穿透等的前端端口
    /// </summary>
    public static string MappingPort
    {
        get
        {
            return WebConfigurationManager.AppSettings["BlogEngine.MappingPort"] ??"";
        }
    }
    #endregion

第三步,修改 BlogEngine.Core.Utils 类的 AbsoluteWebRoot 属性,根据 BlogEngine.MappingPort 配置来重新定义 AbsoluteWebRoot

    public static Uri AbsoluteWebRoot
    {
        get
        {
            var context = HttpContext.Current;
            if (context == null)
            {
                throw new WebException("The current HttpContext is null");
            }

            var absoluteurl = context.Items["absoluteurl"];
            if (absoluteurl == null)
            {
                if (BlogConfig.MappingPort.Length == 0)
                {
                    absoluteurl = 

new Uri(context.Request.Url.GetLeftPart(UriPartial.Authority) + RelativeWebRoot);

                }
                else
                {
                    string authority = context.Request.Url.Scheme + "://" 
  • context.Request.Url.Host
  • ("80".Equals(BlogConfig.MappingPort) ? "" : ":" + BlogConfig.MappingPort);

        absoluteurl = new Uri(authority + RelativeWebRoot);
    }
    context.Items["absoluteurl"] = absoluteurl;

    }

    return absoluteurl as Uri;

            }
        }

    完成这三步,在页面上显示的链接端口号就对了。

原创文章,转载注明出处!

博易.NETC#Asp.Net端口

我来吐槽

*

*