我有我的整個數據庫控制器,該代碼如下:多個IQueryable在一個控制器中?
public class YogaController : DbDataController<Yoga.Models.YOGAEntities>
{
public YogaController()
{
}
public IQueryable<Yoga.Models.Action> GetActions(int BugId)
//GetActions retrieves "actions" table from the db, not Actions in MVC term
{
return DbContext.Actions.Where(x => x.FK_BugsID == BugId);
}
public IQueryable<Yoga.Models.Label> GetRequiredLabels()
{
return DbContext.Labels.Where(x => x.IsRequired == true);
}
public IQueryable<Yoga.Models.Role> GetRoles()
{
return DbContext.Roles;
}
public IQueryable<Role> GetRoles2() //TODO: finish this
{
return DbContext.Roles.Where(x => x.RoleID == 1);
}
public IQueryable<Tag> GetTags(int actionid)
{
return DbContext.Tags.Where(x => x.J_Tags.Any(y => y.FK_ActionID == actionid));
}
}
正如你可以看到我有多個IQueryable的一個控制器,每個查詢不同的表。這是被禁止的嗎?因爲當我去localhost/api/Yoga/GetActions
或localhost/api/Yoga/GetRequiredLabels
我得到錯誤信息:
Multiple actions were found that match the request:
System.Linq.IQueryable`1[Yoga.Models.Label] GetRequiredLabels() on type Yoga.Controllers.YogaController
System.Linq.IQueryable`1[Yoga.Models.Role] GetRoles() on type Yoga.Controllers.YogaController
System.Linq.IQueryable`1[Yoga.Models.Role] GetRoles2() on type Yoga.Controllers.YogaController
當我禁用所有,但一個IQueryable的,結果出來了罰款。
我搜索了類似的問題,並檢查了我的路由設置,控制器路徑和名稱沒有衝突。
我的路線(生成默認):
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
//routes.MapRoute(
// name: "Default",
// url: "{controller}/{action}/{id}",
// defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
任何想法?
爲什麼你返回IQueryable作爲你的動作方法的返回類型? – Shyju
這是我看到使用MVC4的教程:http://goo.gl/mqzDD 前端使用upshot.js的地方,它直接處理IQueryable。 我不太確定確切的機制 – Bonk
返回IQueryable允許您在該動作的查詢字符串中使用OData過濾器和選項 – diaho