AJAX getJSON调用适用于IIS Express但不适用于IIS(ASP.NET / MVC4)

时间:2013-07-17 21:36:48

标签: jquery ajax asp.net-mvc rest

它找到了使用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; ?

2 个答案:

答案 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上激活,甚至仅限于某些主机名。