我正在尝试基于Asp.Net MVC4 web api框架创建REST api。 GET
请求工作正常。所有其他动词都被服务器忽略。
它只是说以下内容:
"No action was found on the controller 'Track' that matches the request."
虽然示例错误来自Track控制器,但所有其他控制器都存在同样的问题。
这是我试图调用的控制器轨道上的方法:
[HttpPost]
public Object Index(string token, string juke, string track)
{
}
我尝试使用像这样的JSON
对象:
{ "track": "0000", "juke": "0000" }
我尝试使用“正常”方式:
track=0000&juke=0000
以上示例中的'0000'是真实身份的替身。
确保我还发布Register()
的{{1}}:
WebApiConfig.cs
答案 0 :(得分:1)
在TrackController
中尝试此操作。因为您使用多个参数,所以必须将它们声明为可选参数。
[HttpPost]
public Object Index(string token="", string juke="", string track="")
{
}
您可以强制使用参数token
,因为token
在路由配置DefaultIndexBackEnd
中被声明为可选项。我认为当[FromBody]
个动作有多个参数时,使用POST
属性是一个好主意。
答案 1 :(得分:1)
首先,了解典型的REST Web API应该如何工作非常重要。通常,它使用不同的HTTP谓词(GET,POST,PUT,DELETE)进行特定操作。
因此,当我在[HttpPost]
操作上看到Index
时,我觉得REST API模式已被破坏。
相反,在您的控制器中,您应该有Entity Get(int id)
操作(获取数据)和void Post(Entity entity)
操作来创建新记录。
无需使用HttpGet
或HttpPost
修饰您的操作,MVC Api框架会根据其名称将请求路由到您的操作。
您可以查看示例here。
答案 2 :(得分:1)
经过几个小时的尝试和研究文章后,我终于找到了an article来准确描述我的问题!如果您遇到同样的问题,请查看该文章。
问题是我必须在动作的一个参数上使用[FromBody]
属性。将juke
和track
移到模型后,它最终按照我的希望工作。
感谢大家的帮助,你们都让我走上正轨!