1

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

4

2 回答 2

4

如果您将应用程序部署到 IIS,您的 URI 也必须包含您的应用程序名称。因此,由于您的应用程序名称是AGS.Web,那么您的 URI 必须是http://localhost/AGS.Web/api/valuues/5

您可以自动检测您的 baseUri 并通过在母版页中添加一行或 shared 将其放在前面_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中得到了这个,我在本周部署期间遇到了同样的问题。

于 2013-10-16T22:43:03.120 回答
0

从这个角度来看,IIS Express 和 IIS 之间没有区别。默认 IIS 配置响应 GET 动词,因此您可能已将 Web 应用程序配置为在不同的 URL 上激活,甚至仅限于某些主机名。

于 2013-07-17T21:46:58.587 回答