2012-09-16 81 views
0

我剛剛得到了Scott Hanselman的chat app,SignalR與ASP.NET MVC 4一起工作。經過幾個小時的配置,試驗和錯誤以及獲取不同版本的Windows在我家中彼此交談網絡,這是所有工作,除了我留下一個問題,我不知道如何處理。在開發和發佈版本之間的URL路徑變化

的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

這是你需要的,因爲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,而不是像RootUrl這樣的變量,只需將它傳遞給一個空字符串或「/」即可獲取應用程序的根URL。

+0

這個想法很完美。謝謝。我用這個:'var rootUrl ='@ Url.Content(「〜」)';'和'var connection = $ .connection(rootUrl +'echo');' –

+0

太棒了,沒問題!我很高興你能用我的例子弄清楚你需要做什麼來創建一個'rootUrl'變量並正確使用它。 – Ian

相關問題