Asp.net-Mvc

將動態 JSON 對像傳遞給 Web API - Newtonsoft 範例

  • June 9, 2021

我需要將動態 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
}

引用自:https://stackoverflow.com/questions/14071715