我有以下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
方法永远不会被调用。有谁知道为什么?
答案 0 :(得分:5)
您是否使用该过滤器装饰了控制器(或任何操作方法)?
例如
如果必须仅在特定操作方法上应用过滤器,将过滤器放在该特定操作方法上
[LogApiRequestActionFilter]
public class YourController : ApiController
{ //--->controller level filter
[LogApiRequestActionFilter] //-->action level filter
public IHttpActionResult DoAction()
{
}
}
http request
。检查您的过滤器是否已注册 答案 1 :(得分:3)
我刚刚发现了我的问题,非常感谢现在他不能被命名为。
我的过滤器已正确注册并且也完美加载,只是我正在测试和调试的方法,没有被请求调用。它是从一个剃刀助手调用的,Request
- 属性当然是null
。
所以修复是使用一个用http request
调用的动作,而不仅仅是普通的方法调用。