[英]C# Web service, how to receive JSON
我用jquery創建了一個JSON字符串,我想把它發送到C#web api控制器。
這是JSON對象的示例
{"Name":"","Type":"4","Meals":["2","3"],"Excludes":["Beef","Chicken"]}
我試着用這樣的URL發送它
API/Recipe/Search?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對象?
謝謝
您應該使用POST屬性和方法,這樣您就可以將復雜對象發布到Web API,
您可以為JSON創建一個類,從json到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";
}
您可以嘗試fiddler,在發出請求時,在請求標頭中指定類型:
內容類型:應用程序/ JSON
並在請求正文中粘貼你的json和Execute
看起來你已經得到了回復,但這是一個可行的解決方案的代碼:
注意:我在MVC3中使用了JsonResult Actions,但原理是相同的
控制器:
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>
希望這可以幫助...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.