【发布时间】:2014-11-20 18:33:50
【问题描述】:
为了避免获取每个操作的用户数据,我创建了一个自定义操作过滤器,该过滤器通过用户 ID 获取用户,然后传递给操作。
public class UserDataAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
...
// getting the user and storing it in the request properties
object user = userBLL.GetUserById(userId);
actionContext.Request.Properties.Add("User", user);
}
}
我可以像这样在 action 方法中获取用户对象:
[Authorize]
[UserData]
[HttpGet]
[Route("dosomething")]
public IHttpActionResult DoSomething()
{
// retrieve the user
object user;
Request.Properties.TryGetValue("User", out user);
User u = (User)user;
return Ok();
}
但是,在 MVC 中,可以在过滤器中使用 ActionParameters 来存储操作方法将使用的内容,如下所示:
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
...
// Create object parameter.
filterContext.ActionParameters["User"] = userBLL.GetUserById(userId);
}
然后像原始请求的一部分一样使用 User 对象:
[AddActionParameter]
public ActionResult Index(User user)
{
// Here I can access the user setted on the filter
...
return View();
}
所以,我的问题是:Web API 2 中有一种方法可以将动作过滤器中的用户对象作为参数传递给动作,就像在 MVC 中一样?
【问题讨论】:
标签: asp.net-mvc-5 asp.net-web-api2