我正在尝试在 DotNetNuke 模块中包含基本的 Breeze 示例(它在独立的 WebAPI 项目中运行良好)。为了简化操作,我删除了客户端,只引用我在 Chrome 浏览器中进行的 URL JSON 调用。
我可以看到我的元数据和完整的项目列表,例如: http ://www.dnndev.me/DesktopModules/framework/api/breeze/dare/metadata http://www.dnndev.me/DesktopModules/framework/api /微风/敢于/待办事项
但是,当我尝试从 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;
}
}