首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebAPI ActionFilterAttribute OnExecuting不开火

WebAPI ActionFilterAttribute OnExecuting不开火
EN

Stack Overflow用户
提问于 2015-04-07 15:55:01
回答 2查看 6.2K关注 0票数 4

我有下面的Web ActionFilterAttribute

代码语言:javascript
复制
namespace namespace.Filters {

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web.Http.Controllers;
    using System.Web.Http.Filters;

    public class LogApiRequestActionFilterAttribute : ActionFilterAttribute {

        public LogApiRequestActionFilterAttribute() {
        }

        private void logData(HttpActionContext actionContext) {
            var controllerName = actionContext.ActionDescriptor.ControllerDescriptor.ControllerType.FullName;
            var actionName = actionContext.ActionDescriptor.ActionName;
            var parameters = "";

            foreach (var item in actionContext.ActionArguments) {
                parameters += string.Format("{0} = {1}, ", item.Key, item.Value);
            }

            if (parameters.Any()) {
                parameters = parameters.Remove(parameters.Count() - 2);
            }

            var message = string.Format("{0}.{1}({2})", controllerName, actionName, parameters);
            // Do the logging
        }

        public override void OnActionExecuting(HttpActionContext actionContext) {
            logData(actionContext);
            base.OnActionExecuting(actionContext);
        }
    }
}

当我通过WebApiConfig.cs全局添加它时,如下所示:

代码语言:javascript
复制
config.Filters.Add(new LogApiRequestActionFilterAttribute());

但是logData方法从未被调用过。有人知道为什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-08 09:34:18

我刚刚发现了我的问题,非常感谢现在他不能被命名为

我的过滤器已经正确注册,并且加载得很好,只是我测试和调试的方法没有被请求调用。它是从剃须刀助手那里调用的,Request-property当然是null

因此,修复方法是使用一个用http request调用的操作,而不是普通的方法调用。

票数 3
EN

Stack Overflow用户

发布于 2015-04-08 09:14:48

你用那个过滤器装饰你的控制器(或任何动作方法)吗?

例如:

  1. 在创建了一个名为LogApiRequestActionFilterAttribute的过滤器之后,您需要注册它(就像您所做的那样)。
  2. 注册后,如果必须在控制器级别应用过滤器,那么会用该过滤器装饰控制器
  3. 如果必须仅在特定操作方法上应用筛选器,则将筛选器放置在该特定操作方法上。 LogApiRequestActionFilter公共类YourController : ApiController {//-->控制器级过滤器LogApiRequestActionFilter //->操作级过滤器公共IHttpActionResult DoAction() {}
  4. 如果两者都不起作用,则在操作方法执行时,放置一个断点并分析。检查您的过滤器是否已注册**
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29495859

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档