在将项目从开发服务器移动到实时服务器时更改URL

时间:2011-06-29 23:16:58

标签: asp.net url

这是一个相对较小的问题。

在开发ASP.Net网站时,如果我指的是使用ResolveUrl()方法的资源,它可以在实时服务器或开发服务器上运行,但不能同时在两者上运行,具体取决于提供的URL。 例如,如果我的代码尝试选择具有以下代码的资源,则它可以在实时服务器上运行,但不能在开发服务器上运行,因为JScript.js不在http://localhost:xx/Assets下,但在http://localhost:xx/ApplicationName/Assets下。

<script src='<%# ResolveUrl("~/Assets/JScript.js")%>' type="text/javascript"></script>  

为了使它在两台服务器上都能正常工作,我必须根据我正在处理的服务器不断更改URL。

我一直在遭受这个令人烦恼的问题,但一直忽视它。

有更好的方法吗?

谢谢!

3 个答案:

答案 0 :(得分:1)

我知道这可能不是开箱即用的方式,但我使用这些来确保URLS在我的应用程序中是核心而没有问题。在我的Page / View的基类中提供这些......

public static string ApplicationRootUrl()
        {
            string port = String.Empty;

            if (HttpContext.Current.Request.ServerVariables["SERVER_PORT"] != null && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "80" && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "443")
            {
                port = String.Concat(":", HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString());
            }

            string protocol = "http://";

            if (HttpContext.Current.Request.ServerVariables["SERVER_PORT_SECURE"] != null && HttpContext.Current.Request.ServerVariables["SERVER_PORT_SECURE"] != "0")
            {
                protocol = "https://";
            }

            return String.Concat(protocol, String.Concat(HttpContext.Current.Request.Url.Host, port, HttpContext.Current.Request.ApplicationPath, '/').Replace(@"//", @"/").ToLower());
        }

        /// <summary>
        /// Expands a virtual URL to an absolute URL using the current application root url
        /// </summary>
        /// <param name="url"></param>
        public static string ExpandUrl(string url)
        {
            if (url.Trim().StartsWith("~"))
            {
                return String.Concat(ApplicationRootUrl(), url.Substring(1).Replace("//", "/"));
            }

            if (url.Trim().StartsWith("www", StringComparison.OrdinalIgnoreCase))
            {
                return String.Concat("http://", url);
            }

            return url;
        }

答案 1 :(得分:1)

正如我在上面的评论中所述,您希望使用&lt;%=%&gt; &lt;%#%&gt; 来呈现内联表达式。您只能将哈希符号用于内联数据绑定。

答案 2 :(得分:0)

尝试在DEV计算机上创建http://localhost:xx/ApplicationName虚拟应用程序。这样〜/ Assets将在PROD和DEV

上的app的根目录中

基本上,“Assets”目录需要位于App的根目录中,因此您需要在Dev和PROD上将“Assets”的父目录设为App root。