Web API - Class 跨请求保留的变量 class 继承 AuthorizeAttribute

Web API - Class variables retained across requests in class inheriting AuthorizeAttribute

我正在尝试实现自定义 AuthorizeAttribute。在下面的示例代码中,当进入 IsAuthorized 方法时,变量 moduleId 保留了上次请求的值。我期待每个请求都有一个单独的对象,因此该值应该为空。

Public Class MyAuthorizeAttribute    
Inherits AuthorizeAttribute

    Private moduleId As String   'This is variable has previous requests value

    Protected Overrides Function IsAuthorized(actionContext As HttpActionContext) As Boolean    
        moduleId = actionContext.RequestContext.RouteData.Values("moduleId")    
        'check if user has access to module    
        Return True
    End Function
End Class

在 AppStart 上,自定义授权属性应用于所有 api 请求。

Public Sub Register(ByVal config As HttpConfiguration)
    config.Filters.Add(New MyAuthorizeAttribute())
End Sub

自定义 ActionFilterAttribute 也会遇到相同的行为。

我的问题是,

  1. 为什么会这样?
  2. 当有数百个并发请求时,这会影响吗?如果是,我该如何克服?

提前致谢!

同一过滤器实例用于所有请求,因此您不能使用 属性。

相反,您想使用局部变量。

Dim moduleId As String = actionContext.RequestContext.RouteData.Values("moduleId")