gpt4 book ai didi

c# - ASP.NET Web API 中不允许使用 HTTP PUT

转载 作者:IT王子 更新时间:2023-10-29 04:21:37 28 4
gpt4 key购买 nike

在我的 Web API 项目中,我无法对我的资源执行 HTTP PUT。我已经通读了 some similar questions on this problem并且我遵循了推荐的建议。

首先,我在我的机器(Windows 7 64 位)上完全卸载了 WebDAV,然后重新启动了我的机器。

其次,WebDAV 处理程序在我的 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();

Attribute Routing 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 处理程序。我已经完成了所有这些操作,但它仍然 不起作用。

在 fiddler 中,我得到以下信息:

PUT https://localhost/Test/API/Authenticate/Link/Foo/Bar

{"Message":"The requested resource does not support http method 'PUT'."}

我做错了什么?

最佳答案

显然,AttributeRouting 中存在一个已知问题,其中 HttpPut 方法当前在 ASP.NET Web API 中不起作用。

currently accepted workaround将适当的动词添加到路线上,直到出现适当的修复:

Web API RC sealed a vital interface for route detection by the underlying framework. Though the interface is now public, the change won't be released until vNext. So here are some workarounds:

  • Use AR attributes in combination with HttpGet, HttpPost, HttpPut, or HttpDelete attributes from System.Web.Http:
[GET("some/url"), HttpGet]
public string Method1() {}

[PUT("some/url"), HttpPut]
public string Method2() {}

[POST("some/url"), HttpPost]
public string Method3() {}

[DELETE("some/url"), HttpDelete]
public string Method4() {}

关于c# - ASP.NET Web API 中不允许使用 HTTP PUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14321988/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com