Asp.net mvc 4 找不到担任职务的简单控制器
自从我将MVC4 webapi测试版更新为RC以来,我已经提出了一些问题,请求帮助解决这些问题。我现在已经把一切都安排好了,但还有一件事我还不知道原因 对于这个简单的控制器,我有一个接受POST的控制器和一个接受GET的控制器。当我试图通过从HTML表单发送请求来运行它们时,只找到GET控制器,而POST控制器将返回以下错误Asp.net mvc 4 找不到担任职务的简单控制器,asp.net-mvc-4,asp.net-web-api,forms,Asp.net Mvc 4,Asp.net Web Api,Forms,自从我将MVC4 webapi测试版更新为RC以来,我已经提出了一些问题,请求帮助解决这些问题。我现在已经把一切都安排好了,但还有一件事我还不知道原因 对于这个简单的控制器,我有一个接受POST的控制器和一个接受GET的控制器。当我试图通过从HTML表单发送请求来运行它们时,只找到GET控制器,而POST控制器将返回以下错误 { "Message": "No HTTP resource was found that matches the request URI 'http://localh
{
"Message": "No HTTP resource was found that matches the request URI 'http://localhost/webapi/api/play/test'.",
"MessageDetail": "No action was found on the controller 'Play' that matches the name 'test'."
}
为什么找不到POST控制器
控制器
public class PlayController : ApiController
{
[HttpPost] // not found
public string Test(string output)
{
return output;
}
[HttpGet] // works
public string Test2(string output)
{
return output;
}
}
HTML表单
<form action="http://localhost/webapi/api/play/test" method="post">
<input type="text" name="output" />
<input type="submit" name="submit" />
</form>
<form action="http://localhost/webapi/api/play/test2" method="get">
<input type="text" name="output" />
<input type="submit" name="submit" />
</form>
Web.API在发布“简单”值时有点挑剔 您需要使用
[FromBody]
属性来表示该值不是来自URL,而是来自发布的数据:
[HttpPost]
公共字符串测试([FromBody]字符串输出)
{
返回输出;
}
通过此更改,您将不再获得404,但输出将始终为空,因为Web.Api要求在中发布值(请查找发送简单类型部分):
其次,客户端需要以以下格式发送值:
=值
具体来说,对于简单类型,名称/值对的名称部分必须为空。并非所有浏览器都支持HTML表单的这种功能,
但您在脚本中创建此格式
因此,建议您创建一个模型类型:
公共类MyModel
{
公共字符串输出{get;set;}
}
[HttpPost]
公共字符串测试(MyModel)
{
返回模型。输出;
}
然后,它将在不修改您的视图的情况下与您的示例FROM一起工作。如果我能在3年后插话,谢谢!!这解决了一个我花了几个小时才解决的问题。这正是SO的意义所在。当webApiConfig.cs和控制器中的过程之间的参数名不匹配时,我也遇到了同样的错误。