2012-03-19 12 views
5

Voglio realizzare il verbo PATCH HTTP recentemente approvato in un servizio RESTful implementato con ASP MVC 3. Ho aggiunto le seguenti impostazioni nel file web.config.Registrazione PATCH HTTP verbo in IIS 7/7.5

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
    <system.webServer> 
     <handlers> 
      <add name="PATCHVerbHandler" path="*" verb="PATCH" modules="ProtocolSupportModule" requireAccess="None" /> 
     </handlers> 
     <security> 
      <requestFiltering> 
       <verbs> 
        <add verb="PATCH" allowed="true" /> 
       </verbs> 
      </requestFiltering> 
     </security> 
    </system.webServer> 
</configuration> 

Il metodo dell'azione è decorato con l'attributo AcceptVerbs("PATCH").

Il servizio funziona correttamente con il verbo PATCH. L'URL viene instradato al giusto metodo di azione e restituisce i dati corretti.

Il problema strano è che se si utilizza un URL diverso che non corrisponde a nessuna route utilizzando il verbo PATCH, IIS restituisce "200 OK" anziché "404 non trovato". Tutti i verbi standard (GET, PUT, DELETE, POST, HEAD, OPTIONS) non hanno questo problema.

Ho bisogno di registrare i gestori supplementari per il verbo PATCH o è un problema di routing? Qualsiasi aiuto è apprezzato.

risposta

6

È Non in realtà bisogno di un gestore personalizzato per elaborare le richieste HTTP fatte con il verbo PATCH; al contrario, è possibile continuare a decorare le proprie azioni con l'attributo AcceptVerbs("PATCH") mentre si controlla che ISAPI di ASP.NET sia configurato per gestire qualsiasi verbo (è l'impostazione predefinita), incluso PATCH.

Se deve gestire questo tipo di richieste che utilizzano un modulo personalizzato, tra l'altro, si prega di tenere a mente che è responsabilità del gestore stesso per impostare il codice di stato per ogni richiesta (compresi quelli informatici dovrebbe gestire, in base alla mappatura, ma non può per qualsiasi motivo) e forse non sta impostando il valore corretto al termine.

+0

La configurazione precedente non utilizza alcun gestore personalizzato. "ProtocolSupportModule" è il gestore ASP.NET standard registrato con i verbi standard come GET, POST, ecc. –

+0

Sul server il verbo PATCH funziona correttamente senza la dichiarazione ProtocolSupportModule. Accetterò questa risposta Qualcosa è probabilmente configurato in modo errato sulla mia workstation. –

Problemi correlati