使用$ http.post时HTTP 405无效方法(HTTP动词)

时间:2017-07-24 10:12:31

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

我使用web api发现了一些奇怪的行为。我正在使用属性路由,并在服务器上发布帖子。 控制器:

    [Route("names")]
    public ResultDTO SaveData(SomeDTO dto)
    {
       //somecode
        ...
    } 

我称之为

     $http.post('/api/mycontroller/names', $scope.model.dto).success(function 
      (data) { ...

它正在运作。但是,如果我重命名我的方法

    [Route("names")]
    public ResultDTO GetData(SomeDTO dto)
    {
       //somecode
        ...
    } 

它不起作用我收到HTTP 405错误由于使用了无效的方法(HTTP动词)来尝试访问,因此无法显示您要查找的页面,

然而,如果我将来自$ http.post的呼叫更改为$ http.get

,它会起作用

显然,如果我发布数据,我不会以GetSomeMethod命名我的方法,但我很好奇,不应该定义路由

   [Route("names")]

使用$ http.post,无论我如何实际调用将处理该帖子的方法?更具体地说,如果我将我的方法命名为GetSomething,为什么$ http.post将无法工作,但是如果我将方法名称更改为,例如,GotSomething或SaveSomething将会起作用?

2 个答案:

答案 0 :(得分:4)

尝试添加路线属性

[HttpPost]

然后您可以按照自己的意愿命名行动。

Web API查看HTTP方法,然后查找名称以该HTTP方法名称开头的操作。例如,对于GET请求,Web API会查找以Get...开头的操作,例如GetContactGetAllContacts。此约定仅适用于GETPOSTPUTDELETE方法。

查看更多here

答案 1 :(得分:0)

$http.post(***) - [HttpPost]$http.get(***) - [HttpGet]

使用正确的动词