Javascript 开发人员和发布版本之间的URL路径更改
我刚得到Scott Hanselman与SignalR合作的ASP.NET MVC 4。经过数小时的配置、尝试和错误,以及让不同版本的Windows在我的家庭网络上相互通信之后,一切都正常了,只剩下一个问题我不知道如何处理 这一行javascript必须更改,这取决于我是通过Visual Studio还是已发布(IIS)版本运行应用程序: 在VS内运行时有效:Javascript 开发人员和发布版本之间的URL路径更改,javascript,jquery,asp.net,iis,Javascript,Jquery,Asp.net,Iis,我刚得到Scott Hanselman与SignalR合作的ASP.NET MVC 4。经过数小时的配置、尝试和错误,以及让不同版本的Windows在我的家庭网络上相互通信之后,一切都正常了,只剩下一个问题我不知道如何处理 这一行javascript必须更改,这取决于我是通过Visual Studio还是已发布(IIS)版本运行应用程序: 在VS内运行时有效: var connection = $.connection('echo'); var connection = $.connectio
var connection = $.connection('echo');
var connection = $.connection('ChatWithSignalR/echo');
http://localhost:9145/
http://localhost/ChatWithSignalR
适用于已发布版本:var connection = $.connection('echo');
var connection = $.connection('ChatWithSignalR/echo');
http://localhost:9145/
http://localhost/ChatWithSignalR
当我在VS中运行时,URL是:var connection = $.connection('echo');
var connection = $.connection('ChatWithSignalR/echo');
http://localhost:9145/
http://localhost/ChatWithSignalR
发布的版本是:var connection = $.connection('echo');
var connection = $.connection('ChatWithSignalR/echo');
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}");
RouteTable.Routes.MapConnection(“echo”,“echo/{*operation}”);
这是您需要注意的事情,因为信号器库不知道应用程序部署到哪里以及它的根地址是什么。我在web应用程序中经常做的事情是使用一个名为site\u root
的全局Javascript变量,并将其设置为站点根的绝对URL。现在,要做到这一点,您需要服务器标记来计算和打印它,比如“
,或者服务器语言的任何语法。然后,在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>
var site_root=“”;
//稍后,在代码中的任何位置:
函数doSomething(){
var echo\u url=site\u root+“/echo”;
//现在您有了echo页面的绝对URL
}
现在,我把它放在总是包含在其中的主布局页面中,就像主布局页面一样,或者取决于您使用的服务器语言。此外,您可以使用某种方法解析URL,而不是像
RootUrl
这样的变量,只需向其传递一个空字符串或“/”即可获得应用程序的根URL。这种想法非常有效。非常感谢。我使用了这个:var rootUrl='@Url.Content(“~”)代码>和var连接=$.connection(rootUrl+'echo')代码>太棒了,没问题!我很高兴您可以使用我的示例来准确地了解您需要做什么来创建rootUrl
变量并正确使用它。