2013-07-17 88 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

相关问题