我已经创建了一个基本控制器,它包含一个UnitOfWork,因此我不必一直新建它。在这个控制器我还补充说,我想要运行的每个请求三个动作过滤器:自定义操作过滤器不会在运行时执行
[ElmahLogFilter]
[LoggingActionFilter]
[RequestValidationFilter]
public class BaseController : ApiController
{
private UnitOfWork _unitOfWork;
public UnitOfWork UnitOfWork
{
get { return _unitOfWork ?? (_unitOfWork = new UnitOfWork()); }
}
}
然后,我只是有一个控制器定义,像这样:
[System.Web.Http.Authorize(Roles = "Host, Guest")]
public class MeetingController : BaseController
{
//Code in here
}
但是没有ActionFilters的将执行时发出请求。我已确保每个ActionFilter都可以使用System.Web.Http.Filters
名称空间,以免与MVC版本冲突。这是我的一个过滤器的样子:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http.Filters;
public class LoggingActionFilter : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
//Logging Code Here
base.OnActionExecuted(actionExecutedContext);
}
}
我都花在这个试图简单地执行一个动作过滤器一段时间,但没有骰子为止。有什么我失踪?
编辑: 只要我删除[Authorize]
属性,过滤器就可以工作。但确保角色在这里得到遵守很重要。
可悲的是,如果我将这些添加到Global.asax中,似乎没有什么区别。如果这有什么不同,我已经用编辑更新了我的问题? – 2014-12-07 21:16:21