Asp.net-Mvc
將動態 JSON 對像傳遞給 Web API - Newtonsoft 範例
我需要將動態 JSON 對像傳遞給我的 Web API 控制器,以便我可以根據它的類型對其進行處理。我曾嘗試使用此處可以看到的 JSON.NET 範例,但是當我使用 Fiddler 時,我可以看到傳入的 JObect 始終為空。
這是粘貼到 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 這是我非常簡單的 Web API 控制器方法:
[HttpPost] public JObject PostSavePage(JObject jObject) { dynamic testObject = jObject; // other stuff here }我是新手,我對此領域有幾個問題:
在這個特定的例子中我做錯了什麼嗎?
可以說,更重要的是,是否有更好的方法來傳遞動態 JSON 對象(來自 JavaScript AJAX 文章)?
感謝所有在這裡提供幫助的人。不幸的是,我從來沒有弄清問題所在。
我將項目一塊一塊地移植到一個新項目中,它工作正常。
對於資訊,我有一個 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 操作有效。
請注意,我目前只是在玩這個,所以程式碼不是最好的,但我認為它在基本形式中可能很有用,以防其他人有類似的問題。
根據 Perception 的評論,您的 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 }