【问题标题】:How to fire OnActionExecuting in Web Api controller?如何在 Web Api 控制器中触发 OnActionExecuting?
【发布时间】:2013-09-20 14:39:00
【问题描述】:

我的 api 端点正在使用 asp.net mvc (4) web api 控制器。

有没有类似 mvc 有 OnActionExecuting 的事件?

另外,如果请求有授权令牌,我如何访问请求对象来查找?

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

由于 Niko 发布的过滤器对我不起作用(我正在使用 ApiController 类),我实现了这个过滤器:

public class MyActionFilter : System.Web.Http.Filters.ActionFilterAttribute 
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        // pre processing
    }
}

确保您不要使用来自“System.Web.Mvc.ActionFilterAttribute”的 ActionFilter。

【讨论】:

  • 感谢完整的命名空间..(在模棱两可的 mvc-webapi 名称的世界中
  • 如何从这里获得对请求对象的访问权限?我需要从查询字符串中获取一些东西
【解决方案2】:

使用action filters

public class MyActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
         //use filterContext.HttpContext.Request...
    }
}

对于您的控制器操作,应用属性

[MyActionFilter]
public Action MyAction(...)
{
    //...
}

正如 Satpal 在他的评论中提到的,您实际上可能想要使用 AuthorizeAttribute 来授权访问您的操作。

【讨论】:

  • AuthorizeAttribute 怎么知道该怎么做?即我想检查当前请求在查询字符串中是否具有正确的令牌。
  • AuthorizeAttribute 与 asp.net mvc 4 网站中的会员提供程序一起使用,它可以授权用户根据请求中的身份验证令牌访问操作。 Details here。如果您只需要检查查询字符串中的某个预定标记,那么使用自定义 ActionFilter 会更容易。
  • 我们可以使用ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken) 或 `Initialize(HttpControllerContext controllerContext)' 方法来覆盖操作调用以验证您是否不想使用 Authorze 属性?
  • ActionExecutingContext 用于 MVC ,从 web api 你应该使用 HttpActionContext
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-23
  • 2012-10-11
  • 2018-02-07
  • 2017-11-21
  • 1970-01-01
  • 2013-09-03
  • 1970-01-01
相关资源
最近更新 更多