我有以下 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 (或任何操作方法)?
例如
- 创建名为 LogApiRequestActionFilterAttribute 的过滤器后,您需要注册它(正如您所做的那样)。
- 注册后,如果必须在 Controller 级别应用过滤器,则使用该过滤器装饰您的 Controller 。
如果过滤器必须仅应用于特定操作方法,将过滤器应用于该特定操作方法
[LogApiRequestActionFilter] public class YourController : ApiController { //--->controller level filter [LogApiRequestActionFilter] //-->action level filter public IHttpActionResult DoAction() { } }
- 如果两者都不起作用,则在执行操作方法时,放置一个断点并分析
http 请求
。检查您的过滤器是否已注册
关于asp.net-mvc - WebAPI ActionFilterAttribute OnExecuting 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29495859/