Передача динамического объекта JSON для веб-API - пример Newtonsoft
Мне нужно передать динамический объект JSON на мой контроллер веб-API, чтобы я мог обрабатывать его в зависимости от того, какой тип он есть. Я попытался использовать пример JSON.NET , который можно увидеть здесь, но когда я использую Fiddler, я вижу, что переданный в JObect всегда null.
Это приложение из примера, вставленного в Fiddler:
POST http://localhost:9185/api/Auto/PostSavePage/ HTTP/1.1
User-Agent: Fiddler
Content-type: application/json
Host: localhost
Content-Length: 88
{AlbumName: "Dirty Deeds",Songs:[ { SongName: "Problem Child"},{ SongName:
"Squealer"}]}
Ans вот мой очень простой метод API API:
[HttpPost]
public JObject PostSavePage(JObject jObject)
{
dynamic testObject = jObject;
// other stuff here
}
Я новичок в этом, и у меня есть несколько вопросов по этой области:
Я делаю что-то не так в этом конкретном примере?
Возможно, что более важно, есть ли лучший способ передать динамический объект JSON (из сообщения JavaScript AJAX)?
Ответы
Ответ 1
Спасибо всем, кто помог здесь. К сожалению, я до сих пор не понял, что было не так.
Я портировал проект по частям на новый проект, и он отлично работает.
Для информации у меня есть класс RouteConfig, который довольно прост в данный момент:
public class RouteConfig
{
private static string ControllerAction = "ApiControllerAction";
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: ControllerAction,
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Мой вызов в API теперь использует JSON.Stringify:
$.ajax("http://localhost:54997/api/values/PostSavePage/", {
data: JSON.stringify(jObject),
contentType: 'application/json',
type: 'POST'
});
Исходное действие API работает.
Заметьте, что я играю только с этим в данный момент, поэтому код не самый лучший, но я подумал, что он может быть полезен в базовой форме, если у кого-то есть аналогичная проблема.
Ответ 2
В соответствии с комментарием о восприятии ваш JSON не выглядит действительным. Запустите его через JSONLint, и вы получите:
Parse error on line 1:
{ AlbumName: "Dirty De
-----^
Expecting 'STRING', '}'
Измените его, чтобы иметь "вокруг имен полей:
{
"AlbumName": "Dirty Deeds",
"Songs": [
{
"SongName": "Problem Child"
},
{
"SongName": "Squealer"
}
]
}
Также вы попытались заменить свой JObject для объекта JToken или Dynamic (например, здесь)?
[HttpPost]
public JObject PostSavePage(JToken testObject)
{
// other stuff here
}
ИЛИ
[HttpPost]
public JObject PostSavePage(dynamic testObject)
{
// other stuff here
}