2

Je préférerais éviter d'entrer dans un débat pour savoir si les verbes HTTP PUT et DELETE sont appropriés ou obsolètes et se concentrer sur la question de réellement faire fonctionner Silverlight lorsque "forcé" à utiliser ces verbes.Comment faire fonctionner HTTP PUT et DELETE dans Silverlight 4

J'essaie de créer une application client Silverlight 4 qui appelle un service Web REST existant qui a des opérations pour les verbes PUT et DELETE. Ce service ne va pas changer.

J'ai ajouté la déclaration suivante dans le constructeur dans mes App.xaml.cs:

WebRequest.RegisterPrefix("http://", WebRequestCreator.ClientHttp); 

Le service a un fichier qui contient clientaccesspolicy.xml:

<?xml version="1.0" encoding="utf-8"?> 
<access-policy> 
    <cross-domain-access> 
    <policy> 
     <allow-from http-request-headers="*"> 
     <domain uri="*"/> 
     </allow-from> 
     <grant-to> 
     <resource path="/" include-subpaths="true"/> 
     </grant-to> 
    </policy> 
    </cross-domain-access> 
</access-policy> 

J'utilise le Classe WebClient pour gérer les requêtes GET et POST. Quand je tente de faire la même chose avec PUT ou DELETE pour le verbe/méthode, j'obtiens une "erreur de sécurité" ambiguë qui m'a conduit à ajouter la déclaration ci-dessus.

J'ai vu divers messages et articles de blog parler de l'utilisation de HttpWebRequest pour contourner ce problème, mais je n'en ai pas trouvé un qui montre réellement comment faire ces appels (asynchrones) à partir d'un client Silverlight.

S'il y a un problème avec le code ci-dessus, s'il vous plaît faites le moi savoir. Sinon, si vous pouvez me montrer ou me montrer un exemple démontrant comment ces demandes peuvent être mises en œuvre, j'apprécierais grandement l'aide.

+1

Peut-être que si vous nous a montré le "code" qui utilise HttpWebRequest – AnthonyWJones

Répondre

1

J'ai résolu mon problème mais je ne suis toujours pas sûr à 100% pourquoi il est corrigé.

À la suggestion d'un collègue, j'ai activé l'exécution de l'application hors navigateur et vérifié que le paramètre nécessitait une confiance élevée lors de l'exécution en dehors du navigateur. L'application fonctionnait bien. Je désactive l'exécution de hors-navigateur et l'application fonctionne toujours bien! Comme l'indique le réglage, il nécessite une confiance élevée lors de l'exécution à l'extérieur du navigateur. Donc, si tel était le problème, alors je ne suis pas sûr que l'avoir vérifié devrait résoudre mon problème lors de l'exécution dans le navigateur. Mais il le fait ...

3

Dans votre fichier clientaccesspolicy.xml, vous devez autoriser les verbes HTTP PUT et DELETE.

J'autorise généralement tous les verbes HTTP, qui ressemblerait à ceci compte tenu de votre configuration d'origine:

<?xml version="1.0" encoding="utf-8"?> 
<access-policy> 
    <cross-domain-access> 
    <policy> 
     <allow-from http-request-headers="*" http-methods="*"> 
     <domain uri="*"/> 
     </allow-from> 
     <grant-to> 
     <resource path="/" include-subpaths="true"/> 
     </grant-to> 
    </policy> 
    </cross-domain-access> 
</access-policy> 

Notez l'attribut ajouté http-methods sur l'élément allow-from.

Questions connexes