如何在 ActionFilterAttribute 的 OnActionExecute 中区分 C# 中的两个 rest



我编写了自己的自定义属性,从ActionFilterAttribute say [TestAttr]派生。我正在覆盖方法OnActionExecute和OnResultExecuted。我还添加了一个检查,即我的 [TestAttr] 是否应用于如下所示的控制器方法

public override void OnActionExecuting(ActionExecutingContext context)
{
if (context.ActionDescriptor is ControllerActionDescriptor)
{
//Need to store a variable int x = 100 here which I want to use later on OnResultExecuted method.
//value of x will keep on changing for different requests. 
//Is there any way to differentiate between two requests when we land here.
}
}
public override void OnResultExecuted(ResultExecutedContext context)
{
if (context.ActionDescriptor is ControllerActionDescriptor)
{
//Do Desired stuff.
//Use the value of x
}
}

基本上,我想执行以下操作 操作执行方法调用 实际休息呼叫 结果执行的方法调用

但是我想在OnActionExecute调用中存储一个值,然后在OnResultExecute方法中使用它。这不应该覆盖多个请求中的值。

您可以使用HttpContext.Items来存储值,以便稍后在请求流中使用。例如:

public class FooAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext context)
{
// Store the value...
context.HttpContext.Items.Add("MyValue", 100);
base.OnActionExecuting(context);
}
public override void OnResultExecuted(ResultExecutedContext context)
{
// Retrieve the value...
if (context.HttpContext.Items.TryGetValue("MyValue", out var value))
{
// We know this is an int so cast it
var intValue = (int)value;
}
base.OnResultExecuted(context);
}
}

最新更新