我有一个LoggingAttribute
,用OnActionExecuted
方法记录请求和响应:
public class LoggingAttribute : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext httpContext)
{
//Logger.Log();
}
}
还有另一个属性可用于验证请求并返回BadRequest
。来自OnActionExecuting
方法的返回响应:
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var modelState = actionContext.ModelState;
if (!modelState.IsValid)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, modelState);
}
}
}
现在,当我在Action方法上同时应用这两个属性时,我的BadRequest
未被记录,但是当我在控制器级别应用LoggingAttribute
并且在动作方法上应用ValidateModelAttribute
时,{{ 1}}被记录(BadRequest
被OnActionExecuted
被调用。
有人可以解释这种行为,即使在控制器上应用属性时没有执行操作方法时,LoggingAttribute
也会被调用。
答案 0 :(得分:2)
您需要首先在行动方法
上应用LoggingAttribute
[LoggingAttribute]
[ValidateModelAttribute]
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
答案 1 :(得分:1)
我尝试过你最喜欢的场景
[HttpGet]
[ValidateModelAttribute]
[LoggingAttribute]
public void test()
{
//throw new NotImplementedException("This method is not implemented");
}
使用与您相同的代码,我发现与您相同的问题,您的LogginAttribute
未被调用,因为您正在为ValidateModelAttribute
中的上下文设置repose,因为请求获得响应它会立即返回(因为这个actionContext.Response =
)当请求得到响应时,它甚至不会调用你应用属性的方法。
此部分的解决方案是您必须编写OnActionExecuting
,然后在Validationattribute OnActionExecuting
方法之前调用OnActionExecuting
,并且您的代码将在LoggingAttribute
之前以public class LoggingAttribute : ActionFilterAttribute
{
public override void OnActionExecuting
(System.Web.Http.Controllers.HttpActionContext actionContext)
{
//Logger.Log();
}
public override void OnActionExecuted(HttpActionExecutedContext httpContext)
{
//Logger.Log();
}
}
方式记录正在回复。
Response
以及更改顺序或属性,下面的原因是设置[HttpGet]
[LoggingAttribute]
[ValidateModelAttribute]
public void test()
{
//throw new NotImplementedException("This method is not implemented");
}
时,那么在这种情况下它只从那个点返回,所以管道中的任何过滤器都不是被叫。
from keras.preprocessing.image import ImageDataGenerator
dataset=ImageDataGenerator()
dataset.flow_from_directory('/home/1',target_size=(50,50),save_to_dir='/home/resized',class_mode='binary',save_prefix='N',save_format='jpeg',batch_size=10)
如下面@programtreasures的回答
所示