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

use*_*567 19 deployment asp.net-mvc jquery iis-7.5

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

Controller/FunctionName



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

我正在使用MVC 4并使用JQUERY Ajax上面代码中所示的功能.当我从Visual Studio运行时它完全正常.

我将它解密到服务器机器,并按预期正常工作.在AJAX调用中没有发现问题.

现在我正在尝试在我的本地机器IIS中部署它,这与我的服务器版本相同,(IIS 7.5)但我正在获取404firebug中的所有ajax调用.

我验证了构建,甚至我指向我的网络文件夹,我仍在寻找出了什么问题!

它适用于其他IIS,所以它不会是一个URL解决问题是我的gues.我错过了任何设置或任何及时的想法来解决这个问题会很棒.

谢谢

Dar*_*rov 35

这很正常.您已将url硬编码为控制器操作:

url: '/Controller/FunctionName',
Run Code Online (Sandbox Code Playgroud)

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

url: '/YourAppName/Controller/FunctionName',
Run Code Online (Sandbox Code Playgroud)

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

url: '@Url.Action("FunctionName", "Controller")',
Run Code Online (Sandbox Code Playgroud)

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

例如,假设你有一个锚点:

@Html.ActionLink("click me", "FunctionName", "Controller", null, new { id = "myLink" })
Run Code Online (Sandbox Code Playgroud)

你AJAXify:

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

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

结论和2条经验法则:

  • 永远不要在ASP.NET MVC应用程序中硬编码URL
  • 在ASP.NET MVC应用程序中处理url时,绝对总是使用url帮助程序

  • 您可以将链接嵌入到按钮中作为HTML5 data-*属性:`<input type ="button"id ="myButton"data-url ="@ Url.Action("SomeAction","SomeController")"value ="点击我"/>`然后在你单独的javascript文件中,你会订阅这个按钮的.click事件,并使用var`url = $(this).data('url');`来检索网址. (3认同)