2016-01-13 3 views
1

У меня есть угловое приложение, вызывающее WebApi. У меня аутентификация и сеанс включены, поэтому мои сообщения и сообщения нуждаются в предполетных вызовах. Я включил Корс в WebApiConfig.vbweb api cors preflight Опции вызова выполняет метод контроллера

Public Sub Register(config As HttpConfiguration) 
    Dim corsAttr = New EnableCorsAttribute("http://localhost:13110", "Origin, Content-Type, Accept, Authorization","GET, PUT, POST, DELETE") 
    corsAttr.SupportsCredentials = True 
    config.EnableCors(corsAttr) 

    config.SuppressDefaultHostAuthentication() 
    config.Filters.Add(New HostAuthenticationFilter(OAuthDefaults.AuthenticationType)) 

* Примечание: Я также должен добавить заголовки ответа в identityConfig.vb Создать метод

If (context.Request.Path.Value = "/token") Then 
    Dim allowedList() As String = New String() {"http://localhost:13110"} 
    Dim credentialsList() As String = New String() {"true"} 
    context.Response.Headers.Add("Access-Control-Allow-Origin", allowedList) 
    context.Response.Headers.Add("Access-Control-Allow-Credentials", credentialsList) 
End If 

Каждый $ HTTP GET и после запроса к API-контроллер выполняет метод контроллера во время запроса параметров. Итак, что происходит, это методы, вызываемые дважды, один раз на «Параметры» и один раз на «Почта». Мне кажется, что этот метод не должен выполняться в настройках. Параметры должны просто предоставлять или запрещать разрешение на выполнение запроса.

ответ

0

Оказывается, запрос параметров не вызывает методы контроллера, но он нажимает на конструктор. Для простоты я создавал экземпляр переменной, которая была сохранена в сеансе в конструкторе, и это привело к тому, что мой сеанс попал в вызов «Параметры», а также «Получить или отправить». Я удалил код из конструктора и вместо этого создал псевдоожидание с использованием поля и свойства.

старый код

Private _foo As FOO 

    Public Sub New() 
     _foo = FOO.GetInstance().GetSession() 
    End Sub 

Новый код

Private fooInstance As FOO 

    Private ReadOnly Property _foo As FOO 
     Get 
      If fooInstance Is Nothing Then 
       fooInstance = FOO.GetInstance().GetSession() 
      End If 
      Return fooInstance 
     End Get 
    End Property 

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