我之前在MVC中创建了POST / GET请求。
在我的HomeController中
[HttpPost]
public string Index(int Value)
{
return Value.ToString();
}
使用表单数据
设置chrome扩展名POSTMAN我可以使用值为'1'的变量'Value'调用http://localhost/mvcApp/
并获得字符串'1'作为回报
但是,当我致电surveyController : ApiController
http://localhost/mvcApp/api/survey/
时无效
public string Post(int Value)
{
return Value.ToString();
}
“消息”:“找不到与请求URI'http://localhost/mvcApp/api/survey/'匹配的HTTP资源。”,
“MessageDetail”:“未在与请求匹配的控制器'调查'中找到任何操作。”
我不确定错误是否与api的创建方式有关,或者是POSTMAN尝试调用api的方式。因为'.'
也可以尝试我的HomeControler索引
client.BaseAddress = new Uri("http://localhost/mvcApp");
var result = client.PostAsync("/api/survey", new
{
Value = 1
}, new JsonMediaTypeFormatter()).Result;
if (result.IsSuccessStatusCode) // here return Not found
答案 0 :(得分:3)
WebApi控制器的惯例与普通的'MVC控制器'不同。
基本上问题是你不能像你那样指定int
参数。
在你的WebApi控制器中试试这个:
// nested helper class
public class PostParams {
public int Value { get; set; }
}
public string Post(PostParams parameters) {
return parameters.Value.ToString();
}
看看它是如何运作的。
这是一篇关于将POST请求中的参数传递给WebAPI控制器的详尽文章: Passing-multiple-POST-parameters-to-Web-API-Controller-Methods
长话短说,这些是惯例,粗略地说:
如果您希望使用C#测试WebAPI服务器,可以按照以下步骤操作:
Program.cs
做这样的事情。以下代码使用C#5.0 async
and await
运算符。
它还使用Task
类和anonymous types。
我已经指出官方MSDN文章(点击链接)你应该对这些东西感兴趣。
using System.Net.Http;
using System.Threading.Tasks;
namespace ConsoleApplication1 {
class Program {
public static void Main(string[] args) {
Test().Wait();
}
private static async Task Test() {
HttpClient client = new HttpClient();
await client.PostAsJsonAsync(
"http://localhost/mvcApp/api/survey/",
new {
value = 10
}
);
}
}
}
答案 1 :(得分:0)
这并不容易。经过大量的阅读后,我就这样解决了。
首先,api控制器需要使用[FromBody]属性
定义输入参数// POST api/survey
public void Post([FromBody]string value)
{
}
为了测试我在视图中放了一个按钮并使用Ajax / Post,变量名在变量值之前需要是一个空字符串。
$(document).ready(
$('#post').click(function () {
var url = 'http://localhost/mvcApi/api/survey';
var data = { "": 'Hola' }; // Define a simple variable this way
$.ajax({
type: "POST",
url: url,
data: data,
success: sucess
}
});
})
或者如果你想发送多个值
data = { "": ["update one", "update two", "update three"] };
但是如果你想要收到一个对象
public void Post(Survey data)
{
string value = data.Value.ToString();
}
$('#post').click(function () {
....
var data = { value: 25 }
此处有更多信息Sending Data和Binding