Веб-API 2 CORS IIS Express Debug и заголовок No Access-Control-Allow-Origin

Пустой проект web.api, установите Microsoft.aspnet.webapi.cors 5.2.3, добавьте

config.EnableCors();

в вебапиконфиг. сделать контроллер и действие

public class HomeController : ApiController
{
    [EnableCors("*" , "*" , "*")]
    public async Task<string> Get()
    {
        return await Task.FromResult("omg");
    }
}

Отладьте приложение, загрузите скрипт и выполните запрос к http://localhost:61939/api/Home.

отсутствуют заголовки CORS. web.config содержит:

<system.webServer>
<handlers>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

what am I missing? Why would this not insert an Access-Control-Allow-Origin header in all request to my Get method?

Также ответ на определение CORS в web.config не является ответом... В какой-то момент мне нужно будет добавить проверку происхождения и, возможно, даже проверку метода HTTP, например:

if(requestContext.HttpMethod == "POST" && (origin == "https://someplace.com" || origin == "http://localhost"))

person dev null    schedule 19.07.2016    source источник


Ответы (1)


То, что вы сделали, достаточно для включения CORS, вы также можете включить CORS на всех контроллерах, используя этот код:

 var cors = new EnableCorsAttribute("*", "*", "*"); 
 config.EnableCors(cors); 

Я не уверен, как вы это тестируете, но обратите внимание, что только когда запрос содержит заголовок Origin, он возвращает заголовок Access-Control-Allow-Origin в ответ. Если вы опустите заголовок источника в запросе, ответ не будет содержать Access-Control-Allow-Origin.

«Заголовки

person akazemis    schedule 20.07.2016
comment
Я не уверен, что следую, я не использую owin (app.UseCors) - person dev null; 20.07.2016
comment
Извините, я не заметил, что он не использует конвейеры. Я отредактировал ответ, взгляните еще раз. - person akazemis; 20.07.2016
comment
Вы совершенно правы, это все, чего мне не хватало, большое спасибо! - person dev null; 20.07.2016
comment
Вау, @akazemis .. твой ответ помог мне решить мою проблему. У меня был такой же случай WebApi2 на IIS Express и не работал только в Chrome и Firefox. Что было не так в моем случае, так это то, что у меня была косая черта '/' в конце при настройке разрешенного источника, такого как localhost:xxxx .. Сам по себе так глуп, но это может случиться с каждым. Надеюсь, это поможет кому-то, у кого нет проблем, которые были у меня: D Хорошего дня и еще раз спасибо! - person Kalin Krastev; 14.03.2017