我使用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将会起作用?
答案 0 :(得分:4)
尝试添加路线属性
[HttpPost]
然后您可以按照自己的意愿命名行动。
Web API查看HTTP方法,然后查找名称以该HTTP方法名称开头的操作。例如,对于GET
请求,Web API会查找以Get...
开头的操作,例如GetContact
或GetAllContacts
。此约定仅适用于GET
,POST
,PUT
和DELETE
方法。
查看更多here
答案 1 :(得分:0)
为$http.post(***) - [HttpPost]
和$http.get(***) - [HttpGet]