2013-07-17 119 views
1

它找到了使用IIS Express查找的MVC控制器。但是,一旦我切換到IIS並進行此調用,它無法找到資源(404)AJAX getJSON調用適用於IIS Express,但不適用於IIS(ASP.NET/MVC4)

'/ api/Values/5'是否正確?或者必須以不同的方式在IIS和IIS Express中工作?

如果我在IIS中運行,我到URL

http://localhost/AGS.Web/api/values/5 

它沒有問題

var RefreshInstructions = function() { 
    var SelectedTaskValue = $("#SelectedTaskType_Id").val(); 
    // Send an AJAX request 
    $.getJSON("/api/Values/5", function (data) { 
     $('#divTaskInstructions').html(data); 
    }); 
} 

Key Value 
Request GET /api/Values/5 HTTP/1.1 

EDIT 1發現它鍵入:它沒有下文稱作爲AGS.Web當我使用IIS EXPRESS,所以我希望有一種通用的方式來引用這兩種情況下的URL?

編輯2:導航到http://localhost/AGS.Web/api/values/5工程找到,但我想問題是'AGS.Web'不存在於當時的AJAX調用。所以我應該預先安排某種類型的服務器變量,如HttpContext.Current.Request.Url ; ?

+1

'/AGS.Web/api/values/5!==/api/Values/5' –

+0

如果您直接在瀏覽器中瀏覽,會發生什麼? –

回答

0

從這個角度來看,IIS Express和IIS沒有區別。 默認的IIS配置會響應GET謂詞,因此您可能已將Web應用程序配置爲在其他URL上激活,甚至僅限於某些主機名。

3

如果您將應用程序部署到IIS,那麼您的URI也必須包含您的應用程序名稱。因此,由於您的應用程序名稱是AGS.Web,那麼您的URI必須是http://localhost/AGS.Web/api/valuues/5

可以自動檢測您的基本URI,並經在你的母版頁添加一行前面或共享_Layout.cshtml

<script type="text/javascript"> 
     var config = { 
      contextPath: '@Url.Content("~")' 
     } 
    </script> 

然後在你的JS,你在前面加上由:

var baseUri = config.contextPath; 

$.getJSON(baseUri + "api/values/5", function (data) { 
    $('#divTaskInstructions').html(data); 
}); 

我這來自我在本週部署過程中遇到同樣問題時遇到的討論javascript-in-virtual-directory-unaware-of-virtual-directory

相關問題