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

标签 c# asp.net asp.net-web-api asp.net-core-2.1

我已经编写了自己的自定义属性,派生自 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/

相关文章:

c# - 在 NuGet 配置中使用环境变量?

c# - OWIN OpenID 提供程序 - GetExternalLoginInfo() 返回 null

ASP.NET MVC 3 ValidateRequest(false) 不适用于 FormCollection

debugging - 如何从中间Web API服务捕获HTTP流量?

c# - Visual Studio 2017 Xamarin Android 编译警告 "fakeLogOpen(/dev/log_security) failed"中断构建

c# - Windows Workflow 是否适合非编程最终用户?

asp.net - 删除 SQL 更新中 WHERE 之前的最后一个逗号

c# - 健壮的计费系统设计。我是不是完全走错了方向?

javascript - 在 angularjs 中找不到 url

vue.js - 如何将 ASP Core Web API VueJS 站点部署到 IIS