【发布时间】:2014-12-07 20:47:21
【问题描述】:
我创建了一个包含 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
}
但是,在发出请求时,任何 ActionFilter 都不会执行。我确保每个 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] 属性,过滤器就会工作。但重要的是要确保角色在这里得到遵守。
【问题讨论】:
标签: c# asp.net-web-api asp.net-web-api2