嗨,我是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请帮忙!提前谢谢你们!
答案 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
);
请记住,应在默认路线或特定路线较少的路线上定义最具体的路线。