Поддержка CORS в службах WCF REST

У меня есть служба WCF REST, размещенная в службе Windows, и я хотел бы отправить HTTP-заголовок Access-Control-Allow-Origin (определенный как часть CORS ) с каждый ответ.

Моя попытка решения заключалась в том, чтобы иметь что-то вроде следующего в реализации IDispatchMessageInspector :

public void BeforeSendReply(ref Message reply, object correlationState)
{
    var httpResponse = reply.Properties["httpResponse"] as HttpResponseMessageProperty;
    if (httpResponse != null)
    {
        // test of CORS
        httpResponse.Headers["Access-Control-Allow-Origin"] = "*";
    }
}

Обычно это работает, но, к сожалению, моя служба также использует базовую авторизацию HTTP , что означает что при поступлении запроса без заголовка авторизации WCF автоматически отправляет ответ 401 с запросом учетных данных. К сожалению, WCF не вызывает мой IDispatchMessageInspector во время этого начального обмена, поэтому заголовок Access-Control-Allow-Origin не добавляется к начальному обмену.

Проблема возникает, когда я пытаюсь вызвать службу из браузера. CORS указывает, что запросы между источниками должны быть разрешены, только если исходный домен совпадает с доменом, указанным в заголовке ответа Access-Control-Allow-Origin (* соответствует всем доменам). К сожалению, когда браузер видит начальный ответ 401 без заголовка Access-Control-Allow-Origin, он предотвращает доступ (согласно той же политике происхождения ).

Есть ли способ добавить заголовок к первоначальному ответу 401, автоматически отправляемому WCF?

19
задан Kevin 28 August 2013 в 15:22
поделиться

1 ответ

Добавление следующей строки к первому методу, который называют в Сервисе WCF, работало на меня.

WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");

Требует, чтобы следующий импорт

System.ServiceModel.Web;

Отослал это для исходного ответа

0
ответ дан 30 November 2019 в 04:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: