在我的 Web API 项目中,我无法HTTP PUT
对我的资源执行操作。我已经阅读了有关此问题的一些 类似 问题 ,并且遵循了推荐的建议。
首先,我在我的机器(Windows 7 64 位)上完全卸载了 WebDAV,然后重新启动了我的机器。
其次,WebDAV 处理程序在 my 中被指定为删除,web.config
动词HTTP PUT
被指定为允许用于无扩展 URL 处理程序。
<modules runAllManagedModulesForAllRequests="false">
<remove name="WebDAVModule"/>
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<remove name="WebDAV"/>
<add name="ExtensionlessUrlHandler-Integrated-4.0"
path="*."
verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
type="System.Web.Handlers.TransferRequestHandler"
resourceType="Unspecified"
requireAccess="Script"
preCondition="integratedMode,runtimeVersionv4.0" />
<add name="AttributeRouting" path="routes.axd" verb="*" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" />
</handlers>
我什至尝试添加 ISAPI 无扩展 URL 处理程序(32 位和 64 位)并将我的应用程序从集成管道应用程序池更改为经典应用程序池。
<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" />
我目前正在使用Thinktecture IdentityModel来启用跨域资源共享 (CORS) 支持。为了我的理智,我已经选择了启用一切以确保HTTP PUT
实际允许的核选项。
config.RegisterGlobal(httpConfig);
config.ForAllResources()
.ForAllOrigins()
.AllowAllMethods()
.AllowAllRequestHeaders();
属性路由NuGet 包配置为从当前程序集和ApiController
.
config.AddRoutesFromAssembly(Assembly.GetExecutingAssembly());
config.AddRoutesFromControllersOfType<ApiController>();
我的资源也具有PUT
正确指定的属性。
[PUT("/API/Authenticate/Link/{key}/{identifier}")]
public Boolean LinkUser(Guid key, String identifier) { ... }
我在这个问题上查找的每个资源都推荐相同的东西:卸载 WebDAV,禁用 WebDAV 处理程序并确保正确配置无扩展 URL 处理程序。我已经完成了所有这些,但它仍然不起作用。
在提琴手中,我得到以下信息:
PUT https://localhost/Test/API/Authenticate/Link/Foo/Bar
{"Message":"The requested resource does not support http method 'PUT'."}
我究竟做错了什么?