2014-10-06 25 views
5

Mam działanie na moim Email Web API 2 Kontroler:Web API 2 Metoda DELETE zawsze zwraca 500

[Authorize] 
[RoutePrefix("api/Email")] 
public class EmailController : ApiController { 

    //... 

    [HttpDelete] 
    [Route("Remove/{id}")] 
    private void Remove(int id) { 
     _repo.Remove(id); 
    } 
} 

Kiedy wywołać akcję z Skrzypek z DELETEhttp://localhost:35191/api/Email/Remove/35571 (lub dowolną inną metodą) uzyskać 500 wróć do ogólnej strony błędu IIS, która nie zawiera informacji o błędzie.

Wygląda na to, że błąd występuje, zanim moja czynność zostanie wywołana, ponieważ ustawienie punktu przerwania w działaniu powoduje, że punkt przerwania nigdy nie zostanie trafiony.

Czy jest wymagana jakaś konfiguracja, aby umożliwić metody DELETE w IIS (Express)?

Próbowałem wyraźnie pozwalając DELETE w moim web.config:

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 

ale bezskutecznie.

+0

Czy masz SyntaxView zainstalowany w Fiddler (zwykle zawiera więcej szczegółów na temat błędu)? – Milen

+1

Pokaż trasę. Czy posiadasz atrybut '[RoutePrefix (...)]' w 'ApiController'? Czy to jest 'api/Email'? Co więcej, zarówno twoja klasa kontrolera, jak i twoja metoda działania muszą być "publiczne". –

+0

SyntaxView zapewnia tylko podświetloną składnią wersję strony HTML, którą daje mi IIS. –

Odpowiedz

10

Trzeba dokonać narażone metody public:

[HttpDelete] 
[Route("Remove/{id}")] 
public void Remove(int id) { 
    _repo.Remove(id); 
} 

Jeśli to nie poskutkuje, to ty probally trzeba usunąć WebDAV (web.config):

<system.webServer> 
    <modules> 
     <remove name="WebDAVModule" /> 
    </modules> 
    <handlers> 
     <remove name="WebDAV" /> 
    </handlers> 
</system.webServer> 
+0

Nie mogę uwierzyć, że to przegapiłem. Dziękuję Ci. –

+0

dodanie usunąć WebDAV naprawił to. Trasa nie miała żadnego wpływu. – MIKE

+0

usuwając webdav Rozumiem, że naprawiono problem, ale co jeszcze usunięto? – MIKE