AJAX请求:
$.ajax({
url: url,
dataType: 'json',
type: 'Post',
data: {token:"4", feed:{"id":0,"message":"Hello World","userId":4} }
});
服务器端Web API:
[HttpPost]
public HttpResponseMessage Post(string token, Feed feed)
{
/* Some code */
return new HttpResponseMessage(HttpStatusCode.Created);
}
错误代码404:{“message”:“找不到匹配的HTTP资源 请求URI'localhost:8080 / api / feed'。“,”messageDetail“:”无动作 在控制器'Feed'上找到了与请求匹配的内容。“}
为什么我收到此错误以及为什么我无法将多个参数发布到我的API?
答案 0 :(得分:12)
首先编写视图模型:
public class MyViewModel
{
public string Token { get; set; }
public Feed Feed { get; set; }
}
您的控制器操作将作为参数:
[HttpPost]
public HttpResponseMessage Post(MyViewModel model)
{
/* Some code */
return new HttpResponseMessage(HttpStatusCode.Created);
}
并最终调整您的jQuery调用以将其作为JSON发送:
$.ajax({
url: url,
type: 'POST',
contentType: 'application/json',
data: JSON.stringify({
token: '4',
feed: {
id: 0,
message: 'Hello World',
userId: 4
}
})
});
AJAX调用需要注意的重要事项:
contentType
设置为application/json
JSON.stringify
函数中以有效地将javascript对象转换为JSON字符串dataType: 'json'
参数。 jQuery将自动使用服务器发送的Content-Type
响应头来推断如何解析传递给success
回调的结果。答案 1 :(得分:2)
尝试此服务器端(从内存中只能有一个FromBody参数,因此它需要包含所有传入属性):
public class TokenAndFeed
{
public String token {get; set;}
public Feed feed {get; set;}
}
public HttpResponseMessage Post([FromBody]TokenAndFeed tokenAndFeed)
{
/* Some code */
return new HttpResponseMessage(HttpStatusCode.Created);
}
答案 2 :(得分:2)
我最近遇到了类似的问题,这里有一些关于我如何解决它的信息。我认为问题与WebApi如何处理参数有关。你可以读一下它here和here,但基本上有两种方法可以在体内或uri中发布参数。正文只能包含一个参数,但它可以是一个复杂的参数,而uri可以包含任意数量的参数(最多为uri字符限制),但它们必须简单。当jquery执行POST ajax调用时,它会尝试传递正文中的所有数据参数,这在您的情况下不起作用,因为正文只能有一个参数。
在代码方面,我认为你需要这样的东西:
var token = "4";
var feed = {Id:0, Message:"Hello World", UserId:4};
$.ajax({
url: "/api/Feed/?token=" + token,
dataType: 'json',
type: 'Post',
data: JSON.stringify(feed)
});
希望有所帮助。
答案 3 :(得分:1)
您可以发布Feed
课程,只是为了确保属性匹配。
var data = {
token: "4",
feed: {Id:0,Message:"Hello World",UserId:4}
}
$.ajax({
url: "/api/Feed/",
dataType: 'json',
type: 'Post',
data: JSON.stringify(data)
});
答案 4 :(得分:0)
试试这个。你必须从body获取json对象数据。读取请求的输入streem并将其映射到您的数据模型。
public class TokenAndFeed
{
public string Token { get; set; }
public Feed Feed { get; set; }
}
[HttpPost]
public HttpResponseMessage Post()
{
System.IO.Stream str;
String jsonContents;
Int32 strLen, strRead;
str = HttpContext.Current.Request.InputStream;
strLen = Convert.ToInt32(str.Length);
byte[] byteArray = new byte[strLen];
strRead = str.Read(byteArray, 0, strLen);
jsonContents = Encoding.UTF8.GetString(byteArray);
TokenAndFeed tAndf = JsonConvert.DeserializeObject<TokenAndFeed>(jsonContents);
// some code here
return new HttpResponseMessage(HttpStatusCode.Created);
}
希望这会有所帮助。