Ho un servizio REST WCF ospitato all'interno di un servizio Windows e desidero inviare l'intestazione HTTP Access-Control-Allow-Origin (definita come parte di CORS) con ogni risposta.Supporto CORS all'interno dei servizi REST WCF
mio tentata soluzione era quella di avere qualcosa di simile a quanto segue in un IDispatchMessageInspector implementazione:
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"] = "*";
}
}
Normalmente questo avrebbe funzionato, ma purtroppo il mio servizio utilizza anche HTTP basic authorization, il che significa che quando arriva una richiesta senza l'autorizzazione intestazione, WCF invia automaticamente una risposta 401 chiedendo le credenziali. Purtroppo WCF non chiama il mio IDispatchMessageInspector durante questo scambio iniziale, quindi l'intestazione Access-Control-Allow-Origin non viene aggiunta allo scambio iniziale.
Il problema si verifica quando provo a chiamare il servizio da un browser. CORS specifica che le richieste di origine incrociata dovrebbero essere consentite solo se il dominio di origine corrisponde al dominio elencato nell'intestazione di risposta Access-Control-Allow-Origin (* corrisponde a tutti i domini). Sfortunatamente, quando il browser vede la risposta iniziale 401 senza l'intestazione Access-Control-Allow-Origin, impedisce l'accesso (in base allo same origin policy).
È possibile aggiungere un'intestazione alla risposta 401 iniziale inviata automaticamente da WCF?
Sei mai arrivato ovunque con questo? –