【问题标题】:Changing URLs while moving project from development server to live server在将项目从开发服务器移动到实时服务器时更改 URL
【发布时间】:2011-06-29 23:16:58
【问题描述】:

这是一个相对菜鸟的问题。

在开发 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。

我一直在忍受这个烦人的问题,但一直忽略它。

有没有更好的方法?

谢谢!

【问题讨论】:

  • 如果您希望它们都位于同一应用程序路径下,请在 Visual Studio 中转到您的 Web 项目属性,单击 Web 并更改“虚拟路径”以匹配您的生产应用程序名称。跨度>
  • 尝试将虚拟路径从 /MyIntranet 更改为 /,但未选择文件。
  • 如果您查看页面的 url/source,它现在是否显示应用程序名称?在您的本地开发盒上,“JScript.js”的工作路径是什么?
  • 现在在浏览器的 Url 框中,我没有看到应用程序名称,但 JScript.js 仍然没有加载。这是我的代码 - &lt;script src='&lt;%# ResolveUrl("~/Assets/JScript.js")%&gt;' type="text/javascript"&gt;&lt;/script&gt;。当我查看源代码时,我应该有类似 &lt;script src="/Assets/JScript.js" type="text/javascript"&gt;&lt;/script&gt; 的东西,但我有这个 &lt;script src='' type="text/javascript"&gt;&lt;/script&gt;。这是我的 JScript.js 文件 ~/Assets/。为什么加载不出来?
  • 将 # 更改为 = 即可解决您的问题(例如 )。

标签: asp.net url


【解决方案1】:

正如我在上面的 cmets 中所发布的,您希望使用 来呈现内联表达式。您只能将井号用于内联数据绑定。

【讨论】:

    【解决方案2】:

    我知道这可能不是开箱即用的方法,但我使用这些方法来确保 URL 在我的应用程序中正确无误。这些在我的页面/视图的基类中可用...

    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;
            }
    

    【讨论】:

    • 出于某种原因,我相信会有更好的方法马克。可能是配置文件或类似文件中的更改。我会尝试你的代码。谢谢!
    【解决方案3】:

    尝试在 DEV 机器上制作 http://localhost:xx/ApplicationName 一个虚拟应用程序。这样 ~/Assets 将在 PROD 和 DEV 上的应用程序的根目录中

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

    【讨论】:

    • 我没有在 IIS 上运行我的应用程序。我使用的是VS自带的开发服务器。
    猜你喜欢
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 2017-08-25
    • 1970-01-01
    相关资源
    最近更新 更多