dev路径和已发布版本之间的URL路径更改

时间:2012-09-16 15:36:37

标签: javascript jquery asp.net iis

我刚刚得到了Scott Hanselman的chat app,SignalR与ASP.NET MVC 4合作。经过数小时的配置,试验和错误,以及让不同版本的Windows在我的家庭网络上互相交流,这一切都是工作,除了我留下了一个我不确定如何处理的问题。

这行javascript必须更改,具体取决于我是通过Visual Studio还是已发布的(IIS)版本运行应用程序:

在VS中运行时工作:

var connection = $.connection('echo');

适用于已发布的版本:

var connection = $.connection('ChatWithSignalR/echo');

当我在VS中运行时,网址为:

http://localhost:9145/

发布的版本为:

http://localhost/ChatWithSignalR

如果我不更改那行代码,并尝试在VS中运行应用程序,使用其中包含ChatWithSignalR的javascript,我会收到如下错误:

Failed to load resource: the server responded with a status of 404 (Not Found)

http://localhost:9145/ChatWithSignalR/echo/negotiate?_=1347809290826

我可以做些什么,以便我可以使用相同的JavaScript代码并让它在两种情况下都有效?

var connection = $.connection('??????');

请注意,这是在我的Global.asax.cs中:

RouteTable.Routes.MapConnection<MyConnection>("echo", "echo/{*operation}");

1 个答案:

答案 0 :(得分:1)

这是您需要注意的事项,因为SignalR库不知道应用程序的部署位置以及它的根地址是什么。我在Web应用程序中总是做的事情是有一个名为site_root的全局Javascript变量,并将其设置为等于站点根目录的绝对URL。现在,要做到这一点,您需要服务器标签来评估和打印,例如"<%= RootUrl %>"或类似于您的服务器语言的语法。然后,在Javascript中引用URL时,应始终使用site_root +“/ echo”(带或不带开头“/”,具体取决于服务器变量/方法打印的内容)。所以你有类似的东西:

<script type="text/javascript">
    var site_root = "<%= RootUrl %>";

    // Later, wherever in your code:
    function doSomething() {
        var echo_url = site_root + "/echo";
        // Now you have an absolute URL for the echo page
    }
</script>

现在,我把它放在总是包含的主布局页面中 - 比如母版页,或者取决于你使用的服务器语言。此外,您可以使用某种方法来解析URL,而只是传递一个空字符串或“/”来获取应用程序的根URL,而不是像RootUrl这样的变量。