0

Я пытаюсь реализовать пользовательский атрибут AuthorizeAttribute. В приведенном ниже примере кода при вводе метода IsAuthorized переменная moduleId сохраняет значение последнего запроса. Я ожидал отдельный объект для каждого запроса, и, следовательно, значение должно быть нулевым.Web API - переменные класса, сохраненные в запросах класса, наследующих AuthorizeAttribute

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 атрибут custom authorize применяется ко всем запросам api.

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

Такое же поведение наблюдается и для пользовательского ActionFilterAttribute.

Мой вопрос,

  1. Почему это происходит?
  2. Будет ли это иметь место, если есть сотни одновременных запросов? Если да, как я мог это преодолеть?

Заранее благодарен!

ответ

0

Тот же экземпляр фильтра используется для всех запросов, поэтому вы не можете использовать свойство.

Вместо этого вы хотите использовать локальную переменную.

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

 Смежные вопросы

  • Нет связанных вопросов^_^