Kne*_*erd 3 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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我在全球范围内添加它时WebApiConfig.cs:
config.Filters.Add(new LogApiRequestActionFilterAttribute());
Run Code Online (Sandbox Code Playgroud)
但这种logData方法永远不会被调用.有谁知道为什么?
你用这个过滤器装饰你的控制器(或任何动作方法)了吗?
例如
如果必须仅对某些操作方法应用过滤器,请将过滤器放在该特定操作方法上
[LogApiRequestActionFilter]
public class YourController : ApiController
{ //--->controller level filter
[LogApiRequestActionFilter] //-->action level filter
public IHttpActionResult DoAction()
{
}
}
Run Code Online (Sandbox Code Playgroud)http request.检查过滤器是否已注册| 归档时间: |
|
| 查看次数: |
4567 次 |
| 最近记录: |