2012-07-18 114 views
4

我做了一個jQuery字符串與jquery,我想將它發送到C#web api控制器。C#的Web服務,如何接收JSON

這是我tryed用一個URL發送這樣

API/Recipe/Search?json={"Name":"","Type":"4","Meals":["2","3"],"Excludes":["Beef","Chicken"]} 

隨着我的控制器這樣的JSON對象

{"Name":"","Type":"4","Meals":["2","3"],"Excludes":["Beef","Chicken"]} 

的例子:

public class RecipeController : ApiController 
{ 

    [HttpGet] 
    public string Search(searchObject json) 
    { 
     return "Asdasd"; 
    } 
} 

和像這樣

public class RecipeController : ApiController 
{ 

    [HttpGet] 
    public string Search(string json) 
    { 
     searchObject search = (searchObject)JsonConvert.DeserializeObject(json); 

     return "Asdasd"; 
    } 
} 

但是在任何情況下,控制器都會將其撿起。我正在使用MVC4。

這是我用來打電話的Jquery。 apiLink是我上面發佈的鏈接。

$.getJSON(apiLink, function (data) { 
     var items = []; 

     $.each(data, function (key, val) { 
      items.push('<li id="' + key + '">' + val + '</li>'); 
     }); 

     $('<ul/>', { 
      'class': 'my-new-list', 
      html: items.join('') 
     }).appendTo('body'); 
    }); 

如何讓控制器接收JSON對象?

感謝

+0

是你打開你使用jQuery來調用你的動作? – 2012-07-18 04:05:54

+0

是的。我現在將在原始文章中編輯我的jQuery代碼。螢火蟲顯示該連結是一個HTTP錯誤400錯誤的要求。 – Kyle 2012-07-18 04:08:26

回答

4

您應該使用POST與方法屬性,這樣你就能複雜的對象發佈到Web API,

您可以創建爲JSON類,從json to cSharp

public class SearchObject 
{ 
    public string Name { get; set; } 
    public string Type { get; set; } 
    public List<string> Meals { get; set; } 
    public List<string> Excludes { get; set; } 
} 

然後在您的web api中,使用HttpPost屬性指定方法,Web API將負責在您的模板中發佈json的反序列化。

[HttpPost] 
public string Search(SearchObject json) 
{ 
    return "Asdasd"; 
} 

您可以嘗試小提琴手,爲了使POST請求,請求報頭中指定類型:

內容類型:應用程序/ JSON

,並在請求車身貼你的JSON和執行

0

看起來你已經得到了迴應,但這裏是工作解決方案的代碼:

注:我用MVC3 JsonResult動作,但原理是一樣的

控制器:

public class HomeController : Controller 
    { 
     // 
     // GET: /Home/ 

     public ActionResult Index() 
     { 
      return View(); 
     } 

     [HttpPost] // requires HttpPost attribute 
     public JsonResult SendData(SearchObject payload) 
     { 
      // do something here 

      return Json(new { status = "Success" }); 
     } 
    } 

    public class SearchObject 
    { 
     public string Name { get; set; } 
     public string Type { get; set; } 
     public List<string> Meals { get; set; } 
    } 

查看:

@{ 
    ViewBag.Title = "Index"; 
} 
<script src="../../Scripts/jquery-1.7.2.min.js" type="text/javascript"></script> 
<script type="text/javascript"> 
    $.ajaxSetup({ accepts: "application/json" }); 
    $.ajax({ 
     url: '@Url.Action("SendData")', type: "POST", 
     success: function (data) { 
      alert(data.status); 
     }, 
     error: function (a, b, c) { }, 
     data: { 'Name':'Glenn','Type':'4','Meals':["1","2"] } 
    }); 
</script> 

<h2>Index</h2> 

希望這有助於...

+0

在Web API MVC 4中,您可以簡單地從動作返回對象,並且會根據請求返回json或xml。例如IE會得到JSON和鉻會得到XML返回結果 – Habib 2012-07-18 04:25:15

+0

耶 - 我知道Web API。當我編寫示例時,我沒有在原始問題中看到這些細節。 – 2012-07-18 04:26:54

+0

@Habib/GlennFerrieLive謝謝你的幫助。我能夠修復它。 雖然我有一個問題,你說如果你只是用Web API返回一個對象,它會返回JSON到IE和XML到Chrome?如果你寫的客戶端JavaScript解析json會怎麼樣?你必須寫javascript/query才能接受任何一個? – Kyle 2012-07-18 18:00:23