【问题标题】:POST Ajax call results in not found using jqGrid and ASP.NET MVC 2 on IIS6在 IIS6 上使用 jqGrid 和 ASP.NET MVC 2 找不到 POST Ajax 调用
【发布时间】:2011-02-18 15:05:32
【问题描述】:

这让我很困惑。我将 MVC 2 应用程序部署到 IIS6 并且一切正常,除了我的 jqGrid 调用来获取数据。

在我的开发机器上一切正常,但这是我正在使用的两个 URL

本地开发网络服务器:

POST http://localhost:port/Ctrl.mvc/JsonMethod

IIS6(注意 https - 不确定这是否重要)

POST https://www.example.com/AppName/Ctrl.mvc/JsonMethod

后一个 URL 会导致 HTTP 404,这确实令人困惑,因为在我的本地计算机上一切正常。 JsonMethod 正确声明为 [AcceptVerbs(HttpVerbs.Post)]

编辑

我的疏忽很大。

我所有的 JSON 请求都是/Ctrl.mvc/JsonMethod。那么,在 IIS 服务器上,代码位于一个子文件夹 - AppName。因此,我得到了 404,因为找不到 https://domain/Ctrl.mvc/JsonMethod - 这是正确的。

基本上,我需要在部署时更改我的 JSON 请求 - 我真的不喜欢,但也许有更好的方法?

【问题讨论】:

  • 如果你用 GET 动词浏览其他动作,效果好吗?
  • 是的,所有 GET 都可以正常工作 - 我可以正常浏览

标签: asp.net-mvc asp.net-mvc-2 iis-6 jqgrid


【解决方案1】:

看看Deploy asp.net mvc beta to iis 6 causing 404'shttp://blog.stevensanderson.com/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

您的应用程序中是否有更多使用 POST 的 URL?他们在工作吗?您是否有更多没有 .aspx 或 .mvc 之类的扩展名的 URL?他们工作吗?

更新:在像你这样的所有 JavaScript 中,我的 URL 的不同基本/根部分都有问题。因为你使用jqGrid,我想你也有同样的问题。如果我在 Web 服务器上的虚拟目录中发布我的解决方案,那么所有调用我的 JavaScript 的 URL 都将被更改。所以我给window.location.pathname 并用'/' 拆分它,然后我发现一个新的rootPath 对应于新的位置。我放置在一个函数中的 URL 的这种变基,我在我的解决方案的所有 JavaScript 中调用该函数。 Hire 是在我的网站上完美运行的代码片段:

var pathArray = window.location.pathname.split( '/' );
var rootPath = '';
for (var i = 0; i < pathArray.length; i++) {
    var p = pathArray[i];
    if (p === "") {
        continue;
    }

    if (p.toLowerCase() !== 'home') {
        rootPath += '/';
        rootPath += p;
    } else {
        break;
    }
}
this.urlBase = rootPath + '/Repository.svc';
this.urlExportBase = rootPath + '/ExportToExcel';

解决方案并不完美,但它确实有效。可能是您应该更改此“变基”功能以使其适合您。

【讨论】:

  • 我喜欢它;我肯定会研究这样的事情:)。谢谢奥列格!
  • 我很高兴能帮助你丹!有时一个人用代码写了一个答案,并且什么都不听提出问题的人,但如果我读到“谢谢,它有效”就足够了,我看起来也像☺。
【解决方案2】:

使用 mvc 助手为 jqGrid ajax 函数生成 url 以确保使用正确的 url。

$('#mygrid').jqGrid({ 
    url: '<%= Url.Action("MyControllerJsonAction", Model.RouteValues) %>' 
});

【讨论】:

  • 啊,太好了 - 从来没有想过这个。虽然对网格的调用是在一个单独的 js 文件中。值得一试,谢谢!
【解决方案3】:

当我使用 VS2012 将我的项目(MVC+Kendo UI)发布到 IIS6.0 时,问题就出来了。 F12调试错误是404,Chrome说找不到页面。

这是因为url不正确,应该在url中添加Doamin:

正确的代码是:

function QueryExpSendList() {
var EValid = true;
var uri = AJAXBaseUrl;
if (AJAXBaseUrl.indexOf("localhost") > 0) {
    uri = AJAXBaseUrl + "AJAX/QuerySendList/";
}
else {
    uri = AJAXBaseUrl + "KQExpress/AJAX/QuerySendList/";
}
GenerateExpressSendGrid(uri);
$("#QueryResult").show();

}

错误代码:

function QueryExpSendList() {
var EValid = true;
var uri = AJAXBaseUrl + "AJAX/QuerySendList/";
GenerateExpressSendGrid(uri);
$("#QueryResult").show();

}

sirili@163.com

【讨论】:

    猜你喜欢
    • 2012-04-08
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多