AJAX调用在IIS 7.5中返回404(本地),但在其他IIS中也一样
我在我的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
。
我validation了构建,甚至我指向我的网络文件夹,我仍在寻找出了什么问题!
它适用于其他IIS,所以它不会是一个URL解决问题是我的意见。 我错过了任何设置或任何及时的想法来解决这个问题会很棒。
谢谢
这很正常。 您已将url硬编码为控制器操作:
url: '/Controller/FunctionName',
如果在IIS中的虚拟目录中部署应用程序,则正确的URL应为:
url: '/YourAppName/Controller/FunctionName',
这就是为什么你绝对不应该在ASP.NET MVC应用程序中硬编码URL但是总是使用url helper来生成它的原因:
url: '@Url.Action("FunctionName", "Controller")',
如果这个AJAX调用是在一个单独的javascript文件中,你不能使用服务器端助手,那么你可以从一些你是AJAXifying的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应用程序中硬编码URL
- 在ASP.NET MVC应用程序中处理url时, 绝对总是使用url帮助程序
我在IIS7.5的设置中发现的是“处理程序映射”有一个名为“OPTIONSVerbHandler”的资源未按正确的顺序设置,因此返回为Unknown。
这项工作对我来说,我的localhost ajax调用我的网络服务器,它有一个不同的名称,它不应该给我一个CORS问题,但它确实,这是我的解决方案。
打开IIS,然后单击左窗格中的服务器名称。 在右侧窗格中,双击中间窗格中的“处理程序映射”。 在右侧窗格中,选择“查看有序列表”。 从那里找到’OPTIONSVerbHandler’和’svc-ISAPI-4.0_32bit’,向上移动’OPTIONSVerbHandler’直到它高于’svc-ISAPI-4.0_32bit’。
确保ajax调用中的“处理程序”中没有“Access-Control-Allow-Origin”。
只是Darin答案的补充,如果“AJAX调用是在一个单独的javascript文件中,你不能使用服务器端助手”,请使用隐藏字段在视图中存储url端点:
@Html.Hidden("URLEndpointName", Url.Action("FunctionName", "Controller"))
并在你的js中读取隐藏的字段:
url: $("#URLEndpointName").val(),