从localhost删除方法工作正常,但从IIS不起作用 - web api

时间:2013-10-06 06:37:45

标签: c# asp.net-mvc asp.net-web-api

我正在尝试从数据库中删除对象;我有一个UI层和一个服务层,我已经在IIS上单独加载了UI和服务。我正在使用asp.net web api,我用http delete方法发送请求。所以我运行服务(用f5)和将删除请求发送到http:// localhost:15957/一切正常。 但是当我将请求发送到iis中的主机的网站时会收到此错误:

HTTP Error 405.0 - Method Not Allowed

我查看响应标题,并看到意外的标题:

Allow:GET, HEAD, OPTIONS, TRACE

我不添加此标题。

在Service层的Web.config上,我将以下内容添加到CORS的标题中:

<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>

我的问题是什么?

2 个答案:

答案 0 :(得分:1)

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

你需要进入IIS,进入该站点的Handler Mappings(它可能是以ExtensionlessURLHandler开头的那个......),右键单击然后编辑,然后单击Request Restrictions按钮然后去到动词标签。然后,您可以添加所需的其他动词,或选择所有动词。

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

答案 1 :(得分: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>