asp.net-web-api - 405 使用 AttributeRouting.PUTAttribute 时,除非我还包含 HttpPutAttribute

标签 asp.net-web-api attributerouting

我们有一个 MVC 项目,我正在尝试更新该项目以包含 WebApi。为了获得所需的路由,我们使用了 AttributeRouting。除了返回 405 的 [PUT] 之外,所有调用似乎都正确路由。我已经简化了 Controller 和操作,并且仍然收到带有 [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、AttributeRouting.Core.Http、AttributeRouting.Core.Web、AttributeRouting.WebApi 3.5.6 版

MVC4

未安装 WebDAV。

最佳答案

您所看到的是预期的行为。默认情况下,Web API 中的 Action 选择器假定 Action 是动词 POST如果 Action 名称没有带有动词前缀,如“Get”、“Post”、“Put”、“Delete”等。

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

由于 AttributeRouting 的 PUTAttribute 不是上述类型,Action selector 不考虑它,仍然认为它是默认的,即 POST .所以你的解决方法是 HttpPut属性正确。

关于asp.net-web-api - 405 使用 AttributeRouting.PUTAttribute 时,除非我还包含 HttpPutAttribute,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17196731/

相关文章:

c# - ASP Net Core 属性路由和双正斜杠

ajax - 从 Chrome 调用 Web API OK,从 IE9 (DotNetNuke) 调用失败

asp.net - 它应该是 WebAPI 还是 asmx

c# - MVC WebAPI 中的 MapRoute 或 MapHttpRoute

asp.net-mvc-5 - 将属性路由限制为特定的 HTTP 动词

c# - AttributeRouting 修复两个名为 Id 的参数

asp.net-mvc - 具有多个应用程序的ASP.NET Identity

c# - 将内容放在 HttpResponseMessage 对象中?

asp.net-mvc - MapMvcAttributeRoutes:在应用程序的启动前初始化阶段不能调用此方法

c# - 为多语言站点配置 ASP.NET MVC 属性路由