Desidero utilizzare un componente basato su Ajax (KendoUI) per leggere/modificare entità su un endpoint OData implementato da WCF DataServices.WCF DataService che non supporta le richieste OPZIONI di preflight?
L'implementazione del servizio è stato abbastanza facile, in primo luogo:
public class MyFooService : DataService<FooContext>
{
public static void SetEntitySetAccessRules(IDataServiceConfiguration config)
{
config.SetEntitySetAccessRule("Foos", EntitySetRights.AllWrite);
}
}
Ora mi aspettavo di essere in grado di modificare le entità che utilizzano PUT. KendoUI fornisce un'interfaccia di configurazione semplice e facile e fa un buon lavoro nel generare la richiesta PUT.
Stiamo effettuando una richiesta tra domini e utilizzando CORS. Quindi, ad esempio, Firefox invia una richiesta OPZIONI di preflight al servizio OData prima di inviare il PUT.
Sfortunatamente l'endpoint del servizio non sembra supportare OPTIONS out-of-the-box: la risposta alla richiesta OPTIONS è "501 Not Implemented" con un contenuto vuoto. Almeno siamo riusciti che la risposta ha le intestazioni CORS come segue:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<!-- Enable cross-origin resource sharing -->
<!-- http://enable-cors.org/#how-asp.net -->
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="POST, PUT, DELETE, GET, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="content-Type, accept, origin, X-Requested-With" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>
</system.webServer>
Googling per questo si è rivelata un po 'difficile perché "opzioni" è un termine molto popolare ...
ho trovato this article ma sembra molto, molto complicato. Voglio dire, OData è tutto su REST, non riesco a immaginare che i servizi dati WCF non forniscono un modo semplice per consentire le richieste di verifica preliminare, o?
Suppongo che WCF OData Il servizio funziona su WCF e passa attraverso la stessa pipeline WCF. In tal caso, controlla il link in questa [risposta.] (Http://stackoverflow.com/questions/11597314/origin-http-localhost-is-not-allowed-by-access-control-allow-origin/11606701#11606701). IMHO è il modo più semplice per implementare CORS in WCF. – Obaid
So che questo non è esattamente quello che vuoi, ma penso che il modo più semplice per lavorare con le richieste cross-domain sia solo l'uso del reverse proxy di IIS. In questo modo vai solo contro il tuo dominio e IIS è chi invia la tua richiesta all'altro dominio. Quindi, il tuo codice non deve sapere nulla su altri domini. – lontivero
casualmente incappato in questo; ho pensato di collegarmi a [questo] (https://stackoverflow.com/questions/19808069/wcf-dataservice-odata-and-cors) e [che] (https://data.uservoice.com/forums/ 72027-wcf-data-services-feature-suggerimenti/suggerimenti/4450449-cors-support) per ulteriori discussioni. – tne