的Web API 2 DELETE方法总是返回500
问题描述:
我有一个动作我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);
}
}
当我打电话从提琴手与DELETE
http://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" />
,但无济于事。
答
你必须让你的曝光方法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>
你有安装在Fiddler中的SyntaxView(它通常包含关于错误的更多细节)? – Milen 2014-10-06 16:48:23
显示你的路由。你在'ApiController'上有'[RoutePrefix(...)]'属性吗?它是'api/Email'吗?此外,我相信你的控制器类和你的操作方法都必须是“公开”的。 – 2014-10-06 16:49:22
SyntaxView只给我一个IIS给我的HTML页面的语法高亮版本。 – 2014-10-06 16:49:34