[RoutePrefix("ServiceRequest")]
public class ServiceRequestController : ApiController
{
[HttpPost]
[Route("")]
public IHttpActionResult Post([FromBody]ServiceRequest.Models.ServiceRequest serviceRequest)
{
return Ok();
}
}
我在Route()
中为POST
使用空WebAPI
并调用
`http://localhost.com:59985/ServiceRequest/
这会引发一个错误,指出HTTP Error 405.0 - Method Not Allowed
并且最有可能的原因是
发送到Web服务器的请求使用的HTTP动词不是 配置为处理请求的模块允许
(或)
请求已发送到包含无效HTTP谓词的服务器
(或)
请求是针对静态内容的,并且包含HTTP动词其他 比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
吗?
有什么想法吗?
答案 0 :(得分:1)
原来是个问题,因为[RoutePrefix("ServiceRequest")]
与控制器名称的名称相同。
当我更改[RoutePrefix()]
之前一切正常。
答案 1 :(得分:1)
[RoutePrefix]
为您的路线添加前缀。因此,在您的示例中,如果您没有指定[RoutePrefix]
属性,那么按照惯例,您的路线将是:
.../api/ServiceRequest
通过添加[RoutePrefix]
属性,您说该控制器中的路由将以指定路线为前缀,即您实际上将路线更改为:
.../api/ServiceRequest/ServiceRequest
这可能是您出问题的原因吗?我不确定是否有一个与控制器名称相同的RoutePrefix
一定是问题所在,但我可能错了 - 我还是很擅长这个东西。