2017-02-08 16 views
1

Все запросы на предварительный просмотр от браузеров к моему собственному хостингу OWIN WebAPI не обрабатываются Middleware. Если я сделаю запрос OPTIONS от Postman, они будут обработаны. Почему такое поведение?Запросы предварительной проверки OWIN не обрабатываются

Запрос URL: Метод http://localhost:9000/api/v1/conversations/create?connectionId=13509f44-eacb-4950-8cc8-71bd37098975

Запрос: OPTIONS

Код состояния: 401 Несанкционированное Remote

Адрес: [:: 1]: 9000

Accept: /

Accept-Encoding: GZIP, выкачать, SDCH, уш

Accept-Language: RU-RU, RU, Q = 0.8, EN-US, Q = 0,6, собственная, Q = 0,4

Access-Control -request-заголовки: Content-Type

Access-Control-Request-метод: POST

соединения: держать-жив

Ведущий: локальный: 9000

Происхождение: http://localhost:8080

Referer: http://localhost:8080/

User-Agent: Mozilla/5.0 (Windows NT 10,0; Win64; 64) AppleWebKit/537,36 (KHTML, как Gecko) Chrome/56.0.2924.87 Safari/537,36

Response Заголовки для Chrome:

Content-Length: 0

Дата: Ср, 08 Февраль 2017 4:17:26 GMT

Сервер: Microsoft-HTTPAPI/2,0

WWW-Authenticate: NTLM

заголовки ответа для Почтальон:

Access-Control-Allow-Полномочия → истинного

Access-Control-Allow-Origin → хромированной расширения: // fhbjgbiflinjbdggehcddcbncdddomop

Allow → POST

Content-Length → 76

Content-Type → Applicati вкл/JSON; кодировка = UTF-8

Дата → Ср, 8 февраля 2017 4:21:02 GMT

Сервер → Microsoft-HTTPAPI/2.0

Я добавил поддельный межплатформенное к моему AppBuilder:

public void BuildWebApi(IAppBuilder appBuilder) 
    { 
     appBuilder.Use(async (ctx, next) => 
     { 
      await next(); 
     }); 

и поставить точку останова на строку "ждать следующего()". Таким образом, точка останова не останавливается, когда браузер выполняет предполетный запрос и останавливается в ответ postman OPTIONS.

+0

http://stackoverflow.com/questions/24989769/cors-is-not-working-in-web-api-with-owin-authentication и HTTP: // StackOverflow .com/questions/20079813/how-to-make-cors-authentication-in-webapi-2 могут быть релевантными. Также это, вероятно, поможет, если вы также включили заголовки запроса в свой вопрос. – sideshowbarker

+0

UseCors не работает, потому что он также в фоновом режиме добавляет промежуточное программное обеспечение, которое не вызывается при запросах preflight из Chrome. Конечно, я добавил UserCors() и config.EnableCors(), но это не имеет никакого эффекта. – Argnist

+0

ОК, так http://stackoverflow.com/questions/20079813/how-to-make-cors-authentication-in-webapi-2/25758949#25758949 не помогает? – sideshowbarker

ответ

3

решаемые это,

HttpListener listener = (HttpListener)appBuilder.Properties["System.Net.HttpListener"]; 
listener.AuthenticationSchemeSelectorDelegate = request => 
{ 
    if (request.HttpMethod == "OPTIONS") 
    { 
     return AuthenticationSchemes.Anonymous; 
    } 
};