gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:44:41 25 4
gpt4 key购买 nike

我们有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com