AJAX调用在IIS 7.5中返回404(本地),但在其他IIS中也一样

时间:2013-06-27 08:02:20

标签: asp.net-mvc jquery deployment iis-7.5

我在MVC应用程序中对我的控制器进行了AJAX调用

Controller/FunctionName



$.ajax({
        type: "GET",
        contentType: "application/json; charset=utf-8",
        url: '/Controller/FunctionName',
        .
        .
        .
        )};

使用MVC 4并使用JQUERY Ajax函数,如上面的代码所示。当我从Visual studio运行时它完全正常。

我将此解密到服务器计算机并按预期正常工作。在AJAX调用中没有发现任何问题。

现在正尝试在我的本地计算机IIS 中部署它,这与我的服务器版本(IIS 7.5)相同,但是对于firebug中的所有ajax调用我正在获得404。 / p>

我验证了构建,甚至我指向我的网络文件夹,我仍在寻找出错的地方!!

它可以在其他IIS中运行,所以它不会是一个URL解决问题是我的建议。我错过了任何设置或任何及时的想法来解决这个问题会很棒。

由于

4 个答案:

答案 0 :(得分:34)

这是正常的。您已将网址硬编码到控制器操作中:

url: '/Controller/FunctionName',

如果您在IIS的虚拟目录中部署应用程序,则正确的URL应为:

url: '/YourAppName/Controller/FunctionName',

这就是为什么你绝对不应该在ASP.NET MVC应用程序中硬编码url但总是使用url helper来生成它的原因:

url: '@Url.Action("FunctionName", "Controller")',

如果这个AJAX调用是在一个单独的javascript文件中,你不能使用服务器端助手,那么你可以从一些你是AJAX化的DOM元素中读取这个url。

例如,假设你有一个锚:

@Html.ActionLink("click me", "FunctionName", "Controller", null, new { id = "myLink" })

你是AJAXify:

$('#myLink').click(function() {
    $.ajax({
        url: this.href,
        contentType: 'application/json; charset=utf-8',
        type: 'GET',
        .
        .
        .
    )};    
    return false;
});

注意我们如何从帮助器生成的DOM元素中读取url。

结论和2条经验法则:

  • 从未在ASP.NET MVC应用程序中对网址进行硬编码
  • 绝对总是在ASP.NET MVC应用程序中处理url时使用url帮助程序

答案 1 :(得分:1)

只是Darin's answer的补充,如果“AJAX调用在一个单独的javascript文件中,你不能使用服务器端助手”,请使用隐藏字段在视图中存储url端点:

@Html.Hidden("URLEndpointName", Url.Action("FunctionName", "Controller"))

并阅读js中的隐藏字段:

url: $("#URLEndpointName").val(),

答案 2 :(得分:0)

我在IIS7.5的设置中发现的是“处理程序映射”'有一个名为' OPTIONSVerbHandler'未按正确顺序设置,因此返回为未知。

这项工作对我来说,我的localhost ajax正在调用我的网络服务器,它有一个不同的名称,它不应该给我一个CORS问题,但确实如此,这是我的解决方案。

打开IIS并单击左窗格中的服务器名称。在右侧窗格中,双击'处理程序映射'在中间窗格中。在右侧窗格中,选择'查看订购列表'。从那里找到' OPTIONSVerbHandler'和' svc-ISAPI-4.0_32bit',移动' OPTIONSVerbHandler'直到它高于' svc-ISAPI-4.0_32bit'。

确保您的处理程序'你的ajax通话中没有“访问控制 - 允许 - 来源”#39;在它。

答案 3 :(得分:0)

您可以在网址中使用双点:

$comp_supplies->where('name', $supply->name)->first()['supplier'] = $array2