2014-10-06 55 views
5

我有一個動作我Email的Web API 2控制器:的Web API 2 DELETE方法總是返回500

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

    //... 

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

當我打電話從提琴手與DELETEhttp://localhost:35191/api/Email/Remove/35571的動作(或任何其他方法)我得到一個500返回與通用的IIS錯誤頁面,給我沒有關於錯誤的信息。

看來錯誤發生在我的動作被調用之前,因爲在動作中設置斷點會導致斷點永遠不會被命中。

是否需要某種配置才能在IIS(Express)中使用DELETE方法?

我已經試過明確允許DELETE在我的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" /> 

,但無濟於事。

+0

你有安裝在Fiddler中的SyntaxView(它通常包含關於錯誤的更多細節)? – Milen 2014-10-06 16:48:23

+1

顯示你的路由。你在'ApiController'上有'[RoutePrefix(...)]'屬性嗎?它是'api/Email'嗎?此外,我相信你的控制器類和你的操作方法都必須是「公開」的。 – 2014-10-06 16:49:22

+0

SyntaxView只給我一個IIS給我的HTML頁面的語法高亮版本。 – 2014-10-06 16:49:34

回答

10

你必須讓你的曝光方法public

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

如果沒有工作,那麼你probally需要刪除的WebDav(web.config中):

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

我不能相信我錯過了。謝謝。 – 2014-10-06 16:52:37

+0

添加刪除WebDAV修復它。路線沒有影響。 – MIKE 2016-02-17 22:42:15

+0

通過刪除webdav我明白它解決了這個問題,但它還刪除了什麼? – MIKE 2016-02-17 22:43:40