加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-web-api – 请求的资源不支持http方法“PUT”

发布时间:2020-12-16 07:05:35 所属栏目:asp.Net 来源:网络整理
导读:我在我的Web API(MVC 4)中使用AttributeRouting. 为什么这样做? [AcceptVerbs("PUT")] [PUT("api/v1/tokens/current")] public MemoryToken UpdateToken([FromBody] DeviceTokenViewModel viewModel) {...} 这一个不是吗? [PUT("api/v1/tokens/current")]
我在我的Web API(MVC 4)中使用AttributeRouting.

为什么这样做?

[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中的设置有关. Web服务器部分目前看起来像这样:

<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.NETFrameworkv4.0.30319aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%Microsoft.NETFramework64v4.0.30319aspnet_isapi.dll" preCondition="classicMode,bitness64" responseBufferLimit="0" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,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动词).

哦,我正在使用Visual Studios内置的开发服务器.

多谢你们!

解决方法

在这个 link中,如果没有任何动作匹配,它们将POST方法描述为默认方法.这就是为什么它仍然适用于没有HttpPost属性的CreateToken()方法.

>您可以使用以下属性指定HTTP方法:AcceptVerbs,HttpDelete,HttpGet,HttpHead,HttpOptions,HttpPatch,HttpPost或HttpPut.>否则,如果控制器方法的名称以“Get”,“Post”,“Put”,“Delete”,“Head”,“Options”或“Patch”开头,那么按照惯例,该操作支持该HTTP方法.>如果不是上述方法,则该方法支持POST.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读