Я хочу иметь поле в ActionFilterAttribute, которое относится только к действию, в котором оно живет, например,
public class TimedAction : ActionFilterAttribute
{
long start, end;
public override void OnActionExecuting(HttpActionContext actionContext)
{
start = Stopwatch.GetTimestamp();
base.OnActionExecuting(actionContext);
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
base.OnActionExecuted(actionExecutedContext);
end = Stopwatch.GetTimestamp();
}
}
Можно ли предположить, что TimedAction будет создаваться для каждого действия вызова API?
РЕДАКТИРОВАТЬ: я изменил код на это, и теперь кажется, что запросы являются общими (что ??), и я получаю исключение, когда я пытаюсь добавить keyvaluepair: An item with the same key has already been added.
public override void OnActionExecuting(HttpActionContext context)
{
var start = Stopwatch.GetTimestamp();
context.Request.Properties.Add(new KeyValuePair<string, object>("Stopwatch", start));
base.OnActionExecuting(context);
}
public override void OnActionExecuted(HttpActionExecutedContext context)
{
base.OnActionExecuted(context);
var end = Stopwatch.GetTimestamp();
object o;
long start = 0;
if (context.Request.Properties.TryGetValue("Stopwatch", out o))
{
start = (long)o;
}
}