【问题标题】:Attribute Routing in Web API with RoutePrefix - Strange error带有RoutePrefix的Web API中的属性路由 - 奇怪的错误
【发布时间】:2014-07-29 19:47:30
【问题描述】:
    [RoutePrefix("ServiceRequest")]
    public class ServiceRequestController : ApiController
    {
        [HttpPost]
        [Route("")]
        public IHttpActionResult Post([FromBody]ServiceRequest.Models.ServiceRequest serviceRequest)
        {
            return Ok();
        }
    }

我在WebAPI 中使用一个空的Route() 作为POST 并调用

`http://localhost.com:59985/ServiceRequest/

这会引发一个错误,指出HTTP Error 405.0 - Method Not Allowed,最可能的原因是

  • 发送到 Web 服务器的请求使用的 HTTP 动词不是 被配置为处理请求的模块允许

    (或)

    向服务器发送了一个包含无效 HTTP 动词的请求

    (或)

    请求是针对静态内容的,并且包含 HTTP 动词 other 比 GET 或 HEAD

    (或)

    使用 HTTP 动词 POST 将请求发送到虚拟目录 并且默认文档是不支持HTTP的静态文件 GET 或 HEAD 以外的动词。

但是如果使用Route("Test"),方法just works fine如下:

[POST] 到http://localhost.com:59985/ServiceRequest/Test - 工作正常。 (Route is [Route("Test")])

[POST] 到http://localhost.com:59985/ServiceRequest -------- 不起作用(Route is [Route("")]

POST 是否允许空 Route? 有什么想法吗?

【问题讨论】:

  • 对于 405 响应,您在“允许”标头中看到什么值?
  • @KiranChalla:请看下面的答案。原来是那个问题。

标签: c# .net asp.net-web-api asp.net-web-api2 asp.net-web-api-routing


【解决方案1】:

原来是一些问题,因为 [RoutePrefix("ServiceRequest")] 与控制器名称具有相同的名称。

当我更改 [RoutePrefix()] 时,一切正常。

【讨论】:

  • 你把[RoutePrefix()]改成了什么?它没有公共的空构造函数。
【解决方案2】:

[RoutePrefix] 为您的路由添加前缀。因此,在您的示例中,如果您没有指定 [RoutePrefix] 属性,那么按照惯例,您的路线将是:

.../api/ServiceRequest

通过添加[RoutePrefix] 属性,您表示此控制器中的路由将以指定路由为前缀,即您实际上将路由更改为:

.../api/ServiceRequest/ServiceRequest

这可能是您的问题的原因吗?我不确定有一个与控制器同名的RoutePrefix 一定是问题所在,但我可能是错的——我对这些东西还是很陌生。

【讨论】:

  • 我猜不一样.. 每当你使用attribute routing,你根本不需要使用../api/..。它替换了它们并在内部定义了一条新路由
猜你喜欢
  • 2015-10-09
  • 2015-06-21
  • 2015-03-29
  • 1970-01-01
  • 1970-01-01
  • 2014-07-01
  • 2019-10-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多