5
我用我的网络API(MVC 4)AttributeRouting。请求的资源不支持HTTP方法“PUT”
为什么这样吗?
[AcceptVerbs("PUT")]
[PUT("api/v1/tokens/current")]
public MemoryToken UpdateToken([FromBody] DeviceTokenViewModel viewModel)
{...}
而这一个不?
[PUT("api/v1/tokens/current")]
public MemoryToken UpdateToken([FromBody] DeviceTokenViewModel viewModel)
{...}
错误消息:请求的资源不支持http方法“PUT”。 为什么我必须明确接受PUT动词?
我只是困惑,因为与POST类似的工作就好了(我没有指定接受动词):
[POST("api/v1/tokens")]
public MemoryToken CreateToken()
{...}
从各个岗位我相信这与设置做在我的web.config。网络服务器部目前看起来是这样的:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
<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" />
<add name="AttributeRouting" path="routes.axd" verb="*" type="AttributeRouting.Web.Logging.LogRoutesHandler, AttributeRouting.Web" />
</handlers>
我试着像删除WebDAV和东西两件事情。但目前为止没有任何工作(除非在注释中明确允许PUT动词)。
哦,我使用内置的开发服务器视觉工作室。
谢谢你们!
嗨,谢谢你的解释。是的,我知道我可以指定允许的HTTP方法(请参阅第一个片段)。我也这么认为,如果我只是将我的方法从“UpdateToken”重命名为“PutToken”(尽管听起来不太好),我不需要[AcceptVerbs]属性。但是我愿意。也许这是由于AttributeRouting(在我的文章的第一句中提到)。这其实并不是什么大事。我可以在设置[AcceptVerbs]属性的地方居住,只要我需要它们。不会那么多。我只是希望我可以通过调整我的web.config来忘记这一点。再次感谢! – Ingmar
@IngmarBode,我试图重现你的症状,但不能 - 我改变了方法名放和PutToken,并在这两种情况下工作。请重试并考虑接受此答案。 –