asp.net-mvc - WebAPI ActionFilterAttribute OnExecuting 未触发

标签 asp.net-mvc asp.net-web-api

我有以下 Web API ActionFilterAttribute

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 全局添加它时,如下所示:

config.Filters.Add(new LogApiRequestActionFilterAttribute());

但是 logData 方法永远不会被调用。有谁知道为什么吗?

最佳答案

您是否使用该过滤器装饰了 Controller (或任何操作方法)?

例如

  1. 创建名为 LogApiRequestActionFilterAttribute 的过滤器后,您需要注册它(正如您所做的那样)。
  2. 注册后,如果必须在 Controller 级别应用过滤器,则使用该过滤器装饰您的 Controller
  3. 如果过滤器必须仅应用于特定操作方法将过滤器应用于该特定操作方法

    [LogApiRequestActionFilter]
     public class YourController : ApiController
     { //--->controller level filter
        [LogApiRequestActionFilter] //-->action level filter
        public IHttpActionResult DoAction()
        {
    
        }
    
     }
    
  4. 如果两者都不起作用,则在执行操作方法时,放置一个断点并分析http 请求。检查您的过滤器是否已注册

关于asp.net-mvc - WebAPI ActionFilterAttribute OnExecuting 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29495859/

相关文章:

c# - httpRuntime 元素的 System.web 设置

javascript - Angular.js $resource 与 ASP.Net webapi?

c# - 向我的应用程序添加服务层

c# - 如何使这两个几乎相同的代码块可重用?

c# - 将相对路径转换为完整 URL

c# - 将项目添加到嵌套列表中的嵌套列表的 View

asp.net-mvc - 针对 API Controller 创建 View ?

c# - 国际奥委会 : CaSTLe Windsor and WebAPI

asp.net-ajax - Web API Post 参数始终为 Null

c# - ASP.NET Web Api 身份验证方法