首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >除非我还包含HttpPutAttribute,否则在使用AttributeRouting.PUTAttribute时

除非我还包含HttpPutAttribute,否则在使用AttributeRouting.PUTAttribute时
EN

Stack Overflow用户
提问于 2013-06-20 00:39:30
回答 1查看 2.2K关注 0票数 5

我们有一个MVC项目,我正在尝试更新以包含WebApi。为了获得所需的路由,我们使用AttributeRouting。除了PUT之外,所有的调用似乎都在正确路由,它返回405。我已经简化了控制器和操作,但仍然收到PUT错误,除非我还包含HttpPut。不确定我错过了什么。

代码语言:javascript
复制
    [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、AttributeRouting.Core.Http、AttributeRouting.Core.Web、AttributeRouting.WebApi的3.5.6版

MVC4

未安装WebDAV。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-20 01:00:50

您所看到的是一种预期行为。Web中的动作选择器默认假设动作是动词POST,如果动作名称没有动词前缀,如"Get“、"Post”、"Put“、"Delete”等。

现在,即使您显式地指定了[PUT("Statuses/{siteId}")]属性,它也不能工作,因为操作选择器从System.Web.Http名称空间中查找属性,如HttpGetAttribute、HttpPostAttribute、HttpPutAttribute等。

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17196731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档