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

asp.net-web-api-405使用AttributeRouting.PUTAttribute,除非我

发布时间:2020-12-16 07:05:47 所属栏目:asp.Net 来源:网络整理
导读:我有一个MVC项目,我试图更新以包括WebApi.为了获得所需的路由,我们使用AttributeRouting.除了返回405的[PUT]之外,所有调用似乎都正确路由.我已经简化了控制器和操作,并且仍然使用[PUT]接收错误,除非我也包含[HttpPut].不确定我错过了什么. [RoutePrefix("api
我有一个MVC项目,我试图更新以包括WebApi.为了获得所需的路由,我们使用AttributeRouting.除了返回405的[PUT]之外,所有调用似乎都正确路由.我已经简化了控制器和操作,并且仍然使用[PUT]接收错误,除非我也包含[HttpPut].不确定我错过了什么.

[RoutePrefix("api/Sites")]
    public class SitesController : BaseApiController
    {
        [POST("")]
        public bool CreateSite(SiteSignupArgs args)
        {
            ...
        }

        [GET("Statuses")]
        public IList<SiteAuditViewModel> GetStatuses()
        {
            ...
        }

        [PUT("Statuses/{siteId}")]
        [HttpPut] // This is required or 405 is returned 
        public HttpResponseMessage UpdateStatus(string siteId,UpdateStatusArgs args)
        {
            ...
        }

        [DELETE("Statuses/{siteId}")]
        public HttpResponseMessage Delete(string siteId)
        {
            return Request.CreateResponse(HttpStatusCode.OK);
        }
}

AttributeRouting.Core 3.5.6版,AttributeRouting.Core.Http,AttributeRouting.Core.Web,AttributeRouting.WebApi

MVC4

未安装WebDAV.

解决方法

你所看到的是预期的行为.如果操作名称没有带有“Get”,“Post”,“Put”,“Delete”等动词的前缀,则Web API中的Action Selector默认假定操作为动词POST.

现在,即使您明确指定了[PUT(“Statuses / {siteId}”)]属性,它也无法工作,因为,Action选择器从System.Web.Http命名空间中查找属性,如HttpGetAttribute,HttpPostAttribute,HttpPutAttribute等.

由于AttributeRouting的PUTAttribute不属于上述类型,因此Action选择器不会考虑它,仍然认为它是默认的,即POST.因此,使用HttpPut属性的解决方法是正确的.

(编辑:李大同)

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

    推荐文章
      热点阅读