【问题标题】:AJAX Webmethod call returns 404 on MVC3AJAX Webmethod 调用在 MVC3 上返回 404
【发布时间】:2012-03-29 19:38:00
【问题描述】:

我一直在使用 EXTJS 4 并通过 AJAX 调用加载我的商店,以在 .aspx 页面的代码隐藏中调用 Web 方法。在我尝试将 EXTJS 4 工作移植到 MVC3 项目之前,此方法对我的所有项目都有效。我的电话现在返回 404。

关键部分是该项目(以及 EXTJS4 网络方法调用)在我同事的机器上运行 - 只有我的机器受到这个“404”错误的影响。任何 Web 方法调用,无论是他们的调用还是我编写的调用,都会返回“未找到资源”。怎么回事?

一些代码,如果它有帮助: 加载商店:

Ext.define('pr.store.Store-Items', {
    extend: 'Ext.data.Store',
    model: 'pr.model.Model-Items',
    pageSize: 200,
    groupField: 'groupID',
    autoLoad: { params: { start: 0, limit: 200 } },
    proxy: {
        type: 'ajax',
        //get data from json file for now
        headers: { 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Content-Type': 'application/json; charset=utf-8' },
        url: '/Project/Data.ashx/GetData',           
        reader: {
            type: 'json',
            root: 'd.objects',
            totalProperty: 'd.totalCount'
        },
        extraParams: {
            where: Ext.encode(new Array(''))
            , difference: true
            , mode: 0
        }
    }
});

网络方法

 [System.Web.Script.Services.ScriptMethod(ResponseFormat = System.Web.Script.Services.ResponseFormat.Json, UseHttpGet=true)]
 [System.Web.Services.WebMethod]
 public static object GetData(int start, int limit, string[] where, bool difference, int mode)
 {
     //Code
 }

【问题讨论】:

    标签: ajax asp.net-mvc-3 extjs http-status-code-404


    【解决方案1】:

    我也遇到了这个问题,所以从 Web.Config 中删除了以下内容。

    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
    <remove name="OPTIONSVerbHandler" />
    <remove name="TRACEVerbHandler" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    

    在 system.webServer > 处理程序中找到。


    此外,我们在 Global.asax.cs 文件中还有以下 3 条附加规则:

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");
    routes.IgnoreRoute("{resource}.asmx/{*pathInfo}");
    

    【讨论】:

    • 感谢 NuGet 更新添加了这些配置条目并导致了这种令人头疼的回归......
    • 非常感谢 - 就我而言(与 2017 w/IIS Express 相比),我只需要更改 web.config 即可解决我的问题(我不需要 IgnoreRoute 条目)。跨度>
    【解决方案2】:

    我在 ASP.NET / MVC 混合站点的 aspx 页面上遇到了 WebMethods 的这个问题。

    在 IIS 中,我网站的处理程序映射的顺序不正确(处理程序映射 -> 查看有序列表)。

    ExtensionlessUrl 处理程序必须 PageHandlerFactory-ISAPI-4.0_32bit、PageHandlerFactory-Integrated-4.0 或您的站点使用的任何类似处理程序之后,具体取决于您使用的是集成还是经典,32-或 64 位,以及您的 .NET 版本。确保检查每个处理程序处理的文件扩展名。

    如果 ExtensionlessUrl 处理程序在这些其他处理程序之前,它会将请求 url 视为 MVC 路由,并在找不到时处理 404。

    【讨论】:

    • 非常感谢!这是我的情况。在我的 WebForms 中插入 MVC 后,我遇到了这种情况。并且仅在开发/生产 Web 服务器上,我的工作站具有正确的处理程序顺序。
    【解决方案3】:

    可以是很多不同的东西。从 IIS 的错误配置开始。如果你把这个 URL 放到浏览器中 - 你会得到什么吗?

    【讨论】:

    • 如果我将 Data.ashx 不带参数地放入浏览器中,我将得到一个“Hello World”,ProcessRequest() 方法:响应。 context.Response.ContentType = "文本/纯文本"; context.Response.Write("Hello World");
    • /Project/Data.ashx/GetData 怎么样?你看到 JSON 数据回来了吗?
    • 不,它返回 404。无论如何,您关于 IIS 配置错误的建议结果证明是正确的,所以我检查了是否可以比较两台机器之间的配置,幸运的是有一个配置文件IIS 本身。我用我的同事替换了我的文件,现在它又回来了。感谢您为我指明正确的方向!
    • 配置问题是什么?我有同样的问题。
    • 其实,我只是想通了。必须使用“aspnet_regiis.exe”在 IIS 上重新注册 asp.net 4
    【解决方案4】:

    我在迁移 WebForms 站点以使用 MVC 时遇到了这个问题。由于我只需要暂时通过它并且我目前在站点中没有任何 MVC 内容,因此我更改了 RouteConfig,以便默认路由的 url 是“MVC/{controller}/{action}/{id}”。这使得我现有的“MyPage.aspx/webmethod”请求将得到正确处理,而不是试图将“MyPage.aspx”视为控制器的名称。

    对于更长期的解决方案(直到所有 WebForms,或者至少所有 Web 方法都被 MVC 替换)我可能会添加类似routes.IgnoreRoute("{page}.aspx/{*webmethod}");

    希望对您有所帮助! ;)

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,结果是我的 ASP.net 4.0 没有在 IIS 中正确注册。

      为了解决这个问题,我跑了:

      C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -r
      

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多