Chr*_*ris 114 asp.net-mvc http-status-code-405 asp.net-mvc-4
我很感激任何帮助,因为该网站应该今晚上线!
我有一个带有Delete方法的web api控制器.该方法在运行IIS Express(Windows 8)的本地计算机上执行正常,但只要我将其部署到实时IIS服务器(Windows Server 2008 R2),它就会停止工作并抛出以下错误消息:
HTTP错误405.0 - 不允许的方法由于使用了无效的方法(HTTP Verb),无法显示您要查找的页面
我在网上寻找解决方案,并实施了最合理的解决方案.我的网络配置包含以下设置:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<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>
Run Code Online (Sandbox Code Playgroud)
我也试图在IIS中更改处理程序映射和请求筛选无济于事.请注意,IIS中的WebDAV创作规则似乎已被禁用.
任何想法将不胜感激谢谢.
Chr*_*ris 191
我最终找到了解决方案!如果遇到同样的问题,请将以下内容添加到web.config中
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
<remove name="WebDAVModule"/> <!-- ADD THIS -->
</modules>
... rest of settings here
Run Code Online (Sandbox Code Playgroud)
我希望这有帮助
ale*_*eha 61
在某些情况下,仅从模块中删除它会产生下一个错误:
500.21处理程序"WebDAV"在其模块列表中有一个错误的模块"WebDAVModule"
模块:IIS Web核心通知:ExecuteRequestHandler"
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
Hug*_*opp 31
就我而言,上述解决方案都没有奏效.这是因为我已经改变了参数的名字在我的Delete
方法.
我有
public void Delete(string Questionid)
Run Code Online (Sandbox Code Playgroud)
代替
public void Delete(string id)
Run Code Online (Sandbox Code Playgroud)
我需要使用id
名称,因为这是我的WebApiConfig
文件中声明的名称.请注意id
第三行和第四行中的名称:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
我从这里得到了这个解决方案.
Pav*_*bin 13
HTTP DELETE
动词的Javascript 必须如下所示:
$.ajax({
**url: "/api/SomeController/" + id,**
type: "DELETE",
dataType: "json",
success: function(data, statusText) {
alert(data);
},
error: function(request, textStatus, error) {
alert(error);
debugger;
}
});
Run Code Online (Sandbox Code Playgroud)
千万不能使用这样的:
...
data: {id:id}
...
Run Code Online (Sandbox Code Playgroud)
就像你使用这个POST
方法一样.
在尝试了几乎所有解决方案之后,这对我有用。将此添加到您的 API 配置文件中
<system.webServer>
<handlers>
<remove name="WebDAV" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="OPTIONSVerbHandler" />
<remove name="TRACEVerbHandler" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<modules>
<remove name="WebDAVModule" />
</modules>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
如果您使用的是 IIS 7.0 或更高版本。此问题主要与 IIS 服务器上的 WebDAV 扩展模块有关。这发生在使用发布或删除操作时。
请尝试在网络配置中进行以下设置
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
62198 次 |
最近记录: |