它找到了使用IIS express找到的MVC控制器。但是,一旦我切换到IIS并进行此调用,它就找不到资源(404)
'/ 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
编辑1:当我使用IIS EXPRESS时,它不被称为AGS.Web所以我希望有一种通用的方法来引用这两种情况的URL?
编辑2:导航到http://localhost/AGS.Web/api/values/5
找到但是我猜问题是'AGS.Web'在AJAX调用中不存在。所以我应该在某些服务器变量之前添加HttpContext.Current。 Request.Url; ?
答案 0 :(得分:4)
如果将应用程序部署到IIS,则URI也必须包含您的应用程序名称。因此,由于您的应用程序名称为AGS.Web
,因此您的URI必须为http://localhost/AGS.Web/api/valuues/5
。
您可以通过在母版页中添加一行或共享_Layout.cshtml
来自动检测您的baseUri并将其添加到其中:
<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得到了这个。
答案 1 :(得分:0)
从这个角度来看,IIS Express和IIS之间没有区别。 默认IIS配置响应GET动词,因此您可能已将Web应用程序配置为在其他URL上激活,甚至仅限于某些主机名。