繁体   English   中英

为什么我的ASP.Net MVC4 WEBAPI ActionFilter在运行时被忽略?

[英]Why are my ASP.Net MVC4 WEBAPI ActionFilter being ignored at runtime?

我正在尝试使用ActionFilter属性,因此我可以拦截OnActionExecuting事件并在我的web api代码中进行令牌验证...下面是一些代码剥离了我的安全事项(一个漂亮的样板代码,用于检查令牌是否在具有实体框架的数据库):

public class TokenValidationFilterAttribute : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            var data = new ActionData();
            if (filterContext.HttpContext.Request.QueryString.AllKeys.Contains("token"))
            {
                using (var context = new GNCCustomers()) 
                {
                    data.GNCToken = context.Tokens.Where(t => t.GNCToken == filterContext.HttpContext.Request["token"]).SingleOrDefault();
                    if (data.GNCToken == null)
                    {
                        filterContext.Result = new HttpUnauthorizedResult("MissingOrInvalidToken") ;
                        return;
                    }
                }
                data.HttpVerb = filterContext.HttpContext.Request.HttpMethod;

                foreach (string item in filterContext.HttpContext.Request.QueryString)
                {
                    data.Params.Add(item, filterContext.HttpContext.Request.QueryString[item]);
                }
                data.Path = filterContext.RouteData.Values;

                filterContext.ActionParameters["actionData"] = data;
            }


            base.OnActionExecuting(filterContext);
        }

    }

我只是将它应用到我的控制器上的一个动作方法,如下所示:

public class CustomerController : ApiController
    {
    [HttpPost]        
            [TokenValidationFilterAttribute]
            public HttpResponseMessage Create(ActionData actionData)
            {

                return Request.CreateResponse(HttpStatusCode.OK);
            }...

所以,问题是,如果我在过滤器代码中放置一个断点,在第一行,我们甚至没有得到断点。 我还添加了一些Debug.Print()存根来检查我的环境是否有任何问题...没有...代码只是不运行。

所以,任何人都有任何线索如何处理这个? 我在这里检查一个解决方案是疯了,似乎这个actionFilters没有那么好记录。 MSDN中只有一页,我已经实现了更多内容......

谢谢! 我非常感谢任何帮助。

问候...

很可能是从System.Web.Mvc.ActionFilterAttribute派生的System.Web.Http.Filters.ActionFilterAttribute

第一个来自ASP.NET MVC,第二个来自ASP.NET Web API - 你想要第二个来自ApiController (因此你很可能在ASP.NET MVC应用程序中托管ASP.NET Web API) )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM