2012-03-19 12 views
5

Chcę zaimplementować ostatnio zatwierdzony czasownik HTTP protokołu PATCH w usłudze RESTful zaimplementowanej z ASP MVC 3. Dodałem następujące ustawienia w pliku web.config.Rejestrowanie czasu HTTP protokołu HTTP w 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> 

Metoda działania jest ozdobiona atrybutem AcceptVerbs("PATCH").

Usługa działa poprawnie z czasownikiem PATCH. Adres URL zostanie przekierowany do właściwej metody działania i zwróci prawidłowe dane.

Dziwne jest to, że jeśli używam innego adresu URL, który nie pasuje do żadnej z tras przy użyciu czasownika PATCH, IIS zwraca "200 OK" zamiast "404 Not Found". Wszystkie standardowe czasowniki (GET, PUT, DELETE, POST, HEAD, OPTIONS) nie mają tego problemu.

Czy muszę zarejestrować dodatkowe programy obsługi dla komendy PATCH lub czy jest to problem z routingiem? Każda pomoc jest doceniana.

Odpowiedz

6

Ty nie potrzebujesz rzeczywiście potrzebujesz niestandardowego programu obsługi do przetwarzania żądań HTTP wykonanych za pomocą komendy PATCH; Zamiast tego możesz chcieć udekorować swoje działania za pomocą atrybutu AcceptVerbs("PATCH") podczas sprawdzania, czy ISAPI ASP.NET jest skonfigurowany do obsługi dowolnego czasownika (jest to ustawienie domyślne), w tym PATCH.

Jeśli masz mieć do obsługiwać tego rodzaju wniosków za pomocą niestandardowego modułu, przy okazji, należy pamiętać, że jest to odpowiedzialność samej obsługi, aby ustawić kod statusu dla każdego żądania (w tym te, które to powinien obsłużyć, zgodnie z mapowaniem, ale nie może z jakiegokolwiek powodu) i może nie ustawia poprawnej wartości po zakończeniu.

+0

Powyższa konfiguracja nie używa żadnych niestandardowych funkcji obsługi. "ProtocolSupportModule" to standardowy program obsługi ASP.NET, który jest zarejestrowany w standardowych czasownikach, takich jak GET, POST itp. –

+0

Na serwerze czasownik PATCH działa poprawnie bez deklaracji ProtocolSupportModule. Przyjmuję tę odpowiedź. Coś jest prawdopodobnie źle skonfigurowane na mojej stacji roboczej. –

Powiązane problemy