gpt4 book ai didi

c# - 如何在 ActionFilterAttribute 的 OnActionExecuting 中区分 C# 中的两个 rest 调用

转载 作者:太空宇宙 更新时间:2023-11-03 11:59:30 24 4
gpt4 key购买 nike

我已经编写了自己的自定义属性,派生自 ActionFilterAttribute,比如 [TestAttr]。我正在覆盖方法 OnActionExecuting 和 OnResultExecuted。我还添加了一个检查,确保我的 [TestAttr] 应用于如下所示的 Controller 方法

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
}
}

基本上,我想做以下事情OnActionExecuting 方法调用实际休息电话OnResultExecuted 方法调用

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

最佳答案

你可以使用 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);
}
}

关于c# - 如何在 ActionFilterAttribute 的 OnActionExecuting 中区分 C# 中的两个 rest 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57688633/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com