我有两个ActionFilterAttribute
- ValidateModelStateFilter
和LoggingFilter
。
在ValidateModelStateFilter
我有:
public override void OnActionExecuting(HttpActionContext actionContext)
{
if (!actionContext.ModelState.IsValid)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, actionContext.ModelState);
base.OnActionExecuting(actionContext);
}
}
用于查找ModelState。在LoggingFilter
我有:
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
LogRequest(actionExecutedContext);
base.OnActionExecuted(actionExecutedContext);
LogRensponse(actionExecutedContext);
}
我希望记录每个请求和每个响应,即使它包含任何ModelStateError。
现在,我的问题是:当ModelState无效时,它会按预期返回ErrorResponse,但Logging过滤器不会执行。
这是WebApiConfig.cs注册:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
config.Filters.Add(new AuthorizeAttribute());
// config.Filters.Add(new ValidateNullFilter());
config.Filters.Add(new ValidateModelStateFilter());
config.Filters.Add(new LoggingFilter());
config.Services.Replace(typeof(IExceptionHandler), new GlobalExceptionHandler());
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
你有什么建议我怎么能让它发挥作用?
答案 0 :(得分:0)
在您的日志过滤器中,您需要实现OnActionExecuting和OnActionExecuted
在调用您的操作之前,将调用OnActionExecuting方法,您可以在其中记录请求。 控制器操作运行后,将调用操作过滤器的OnActionExecuted方法,您可以在其中记录响应。