Ajax调用404错误,但我的url是正确的(ASP.NET MVC)

时间:2016-06-10 02:03:05

标签: c# jquery ajax asp.net-mvc http-status-code-404

嗨,我是noob程序员,刚刚进入asp.net mvc和所有这些js的东西。在我目前的mvc项目中,我有这个奇怪的错误,我不知道它为什么会发生。

对于控制器中的两个不同操作,我有两个几乎完全相同的Ajax调用。 GetPages一个成功,另一个给我404.

//////////////////////////////////////////////的ajax叫//////////////////////////////////////////////// /////

//获取页面列表

GetPages = function (myCategory) {
        var url = config.base + "/api/CMS/GetPagesSorted";

        if (myCategory == null)
            return;

        $.ajax({
            url: url,
            type: "GET",
            dataType: "JSON",
            data: { categoryId: myCategory.Id },
            success: function (data) {
                // Clear pages and add new ones
                self.pageList.removeAll();
                self.pageList(data);
            }
        });
    };

//获取标签列表

    GetTabs = function (myPage) {
        var url = config.base + "/api/CMS/GetTabsSorted";

        if (myPage == null)
            return;

        $.ajax({
            url: url,
            type: "GET",
            dataType: "JSON",
            data: { pageId: myPage.Id },
            success: function (data) {
                // Clear tabs and add new ones
                self.tabList.removeAll();
                self.tabList(data);
            }
        });
    };

//////////////////////////////////////////////控制器被称为行动/////////////////////////////////////////////// //////

public IHttpActionResult GetPagesSorted(int categoryId)
    {

        var pages = dbCMS.CMS_Page.Where(x => x.Category.Id == categoryId).Select(x => new
        {
            Name = x.Name,
            OrderId = x.OrderId,
        });
        //sort the page order by OrderId
        pages = pages.OrderBy(x => x.OrderId);

        return Json(pages.ToList());
    }

public IHttpActionResult GetTabsSorted(int pageId)
    {

        var tabs = dbCMS.CMS_Tab.Where(x => x.Page.Id == pageId).Select(x => new
        {
            Name = x.Name,
            OrderId = x.OrderId,
        });
        //sort the page order by OrderId
        tabs = tabs.OrderBy(x => x.OrderId);

        return Json(tabs.ToList());
    }

GetPages函数的url是:     http://localhost:54522/api/CMS/GetPagesSorted

GetTabs功能的网址是:     http://localhost:54522/api/CMS/GetTabsSorted

这些只是复制和粘贴的功能,只更改了控制器操作名称。我真的不认为路由是错误的,因为其中一个调用进入控制器和我希望它去的动作。

我真的很沮丧地发现这个bug请帮忙!提前谢谢你们!

1 个答案:

答案 0 :(得分:0)

乍一看错误告诉我们出了什么问题:

No action was found on the controller 'CMS' that matches the request

表示Web API路由模块未找到具有给定pageId参数的GetTabsSorted,或者发生参数名称不匹配。

要解决可能的GET方法冲突,请为每个操作GetPagesSorted和GetTabsSorted定义MapHttpRoute,类似于这种方式:

// note parameter differences
config.Routes.MapHttpRoute(
    name: "PagesApi",
    routeTemplate: "api/{controller}/{action}/{categoryId}",
    defaults: new { categoryId = RouteParameter.Optional } // change this definition if you want categoryId becomes required
);

config.Routes.MapHttpRoute(
    name: "TabsApi",
    routeTemplate: "api/{controller}/{action}/{pageId}",
    defaults: new { pageId = RouteParameter.Optional } // change this definition if you want pageId becomes required
);

请记住,应在默认路线或特定路线较少的路线上定义最具体的路线。

参考:WebAPI No action was found on the controller