2014-10-06 49 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