2013-10-06 31 views
2

我想从数据库中删除一个对象;我有一个UI层和一个服务层,我已经在IIS上分别加载了用户界面和服务。我使用的是asp.net web api,我用http delete方法发送了请求。所以当我运行服务(用f5)和发送删除请求至http:// localhost:15957/所有事情都可以。 但是,当我将请求发送到该网站主机在IIS中得到这个错误:从localhost删除方法工作正常,但从IIS不起作用-web api

HTTP Error 405.0 - Method Not Allowed 

我看响应报头,并看到了意想不到的头:

Allow:GET, HEAD, OPTIONS, TRACE 

我不添加此头。

在服务层我加入以下为CORS头的Web.config:

<customHeaders> 
     <add name="Access-Control-Allow-Origin" value="*" /> 
     <add name="Access-Control-Allow-Headers" value="Content-Type, x-xsrf-token" /> 
     <add name="Access-Control-Allow-Methods" value="PUT, GET, POST, DELETE" /> 
</customHeaders> 

什么是我的问题吗?

+0

从此线程尝试解决方案。 http://stackoverflow.com/questions/6739124/iis-7-5-enable-put-and-delete-for-restful-service-extensionless –

+0

试过了,没有工作!即使从IIS卸载webDav,仍然无法工作! –

回答

1

IIS中的Handler映射可能仅设置为默认允许GET,HEAD,OPTIONS,TRACE。

您需要转到IIS,进入站点的Handler映射(它可能是以ExtensionlessURLHandler开头的那个....),右键单击然后编辑,然后单击Request Restrictions按钮并单击转到动词选项卡。然后,您可以添加所需的其他动词,或者选择所有动词。

你应该也可以在你的web.config中配置它,但我总是在IIS中完成它。

1

更新IIS web.config文件以允许所有你需要的。只需检查是否指定了所需的。

<system.webServer> 
    <handlers> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0"/> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0"/> 
     <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"/> 
    </handlers> 
</system.webServer>