【发布时间】:2013-06-07 08:59:36
【问题描述】:
我正在尝试在 DotNetNuke 模块中包含基本的 Breeze 示例(它在独立的 WebAPI 项目中运行良好)。为了简化操作,我删除了客户端,只引用我在 Chrome 浏览器中进行的 URL JSON 调用。
我可以看到我的元数据和完整的项目列表,例如: http://www.dnndev.me/DesktopModules/framework/api/breeze/dare/metadata http://www.dnndev.me/DesktopModules/framework/api/breeze/dare/todos
但是,当我尝试从 URL 中过滤列表时,它总是返回完整列表,例如 http://www.dnndev.me/DesktopModules/framework/api/breeze/dare/todos?=DareId%20eq%204
我认为这与我声明 MapHTTRoute 的方式有关。问题是 DotNetNuke 模块没有 Global.ascx。我已将 BreezeWebApiconfig.cs 文件复制到我的 App_Start 文件夹中,并且在我调试时会触发,但是 DotNetNuke 使用机制来注册路由:
using DotNetNuke.Web.Api;
namespace SmartThinker.Modules.Framework
{
public class RouteMapper : IServiceRouteMapper
{
public void RegisterRoutes(IMapRoute mapRouteManager)
{
mapRouteManager.MapHttpRoute("framework", "BreezeApi", "breeze/{controller}/{action}", new[] { "SmartThinker.Modules.Framework.Controllers" });
}
}
}
我已经阅读了http://www.breezejs.com/documentation/web-api-controller#note01 和http://www.breezejs.com/documentation/web-api-routing,但这似乎与 DNN 注册路由的方式有关。有没有办法在不使用 BreezeWebApiConfig.cs 的情况下做到这一点?
我的控制器代码具有 BreezeController 属性。 (当我将示例客户端连接到它时,我确实得到了一个项目列表 - 它只是不过滤,所以我认为这与 OData 操作过滤器有关。我如何调试问题出在哪里?
更新 1) 这是元数据: http://www.ftter.com/desktopmodules/framework/api/dare/metadata
GetUsers 方法: http://www.ftter.com/desktopmodules/framework/api/dare/getusers
GetUsers 方法试图通过 UserID 进行过滤(这不起作用,这是问题所在) http://www.ftter.com/desktopmodules/framework/api/dare/getusers?=UserID%20eq%204 http://www.ftter.com/desktopmodules/framework/api/dare/GetUsersWithoutCors?=UserID%20eq%204(返回 IQueryable)
这里是控制器:
[BreezeController]
public class DareController : DnnApiController
{
private readonly EFContextProvider<FrameworkContext> contextProvider = new EFContextProvider<FrameworkContext>();
[AllowAnonymous]
[HttpGet]
public HttpResponseMessage Metadata()
{
var response = Request.CreateResponse(HttpStatusCode.OK, contextProvider.Metadata());
return GetResponseWithCorsHeader(response);
}
[AllowAnonymous]
[HttpGet]
public HttpResponseMessage GetUsers()
{
var userInfoController = new UserInfoController();
var response = Request.CreateResponse(HttpStatusCode.OK, userInfoController.GetUsers());
return GetResponseWithCorsHeader(response);
}
[AllowAnonymous]
[HttpGet]
public IQueryable<User> GetUsersWithoutCors()
{
return contextProvider.Context.Users;
}
}
【问题讨论】:
标签: asp.net-web-api dotnetnuke breeze