У меня есть служба 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?