CORS предполётная ошибка при обращении в службу хостинга WebApi

Я получил эту ошибку, когда веб-портал связывается с автономной службой WebAPI, расположенной на другом сервере, чем сервер веб-портала:

Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрошенном ресурсе отсутствует заголовок "Access-Control-Allow-Origin". Происхождение 'someportaldomain', следовательно, не разрешено.

Самостоятельно размещенный сервис всегда возвращает заголовок "Access-Control-Allow-Origin" в каждом ответе, но если браузер решает выполнить предварительный полет перед вызовом URL-адреса, пользователь получает эту ошибку на консоли js.

1 ответ

Решение

Я отправляю ответ здесь, так как я не нашел прямой и должен был вытащить его из нескольких постов.

Решение состоит в том, чтобы добавить метод Options к службе Self-hosted, например:

[ServiceContract]    
public interface IACT_HttpService
{
    //[FaultContract(typeof(ValidationFault))]
    [WebInvoke(Method = "OPTIONS", UriTemplate = "*")]
    void GetOptions();

  //My other methods
  ...
}


public class ACT_HttpService : IACT_HttpService
{
    //Adjust this method to restrict the origin as needed
    public void GetOptions()
    {
        log.Debug("Get options fired");
        //These headers are handling the "pre-flight" OPTIONS call sent by the browser
        WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Methods", "POST,GET,PUT,DELETE,OPTIONS");
        //Add here any special header you have
        WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Headers", "X-Requested-With,Content-Type");
        WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-A}llow-Origin", "*");            

        WebOperationContext.Current.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
    }
Другие вопросы по тегам