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;
}