C# Web 服务,如何接收 JSON
Posted
技术标签:
【中文标题】C# Web 服务,如何接收 JSON【英文标题】:C# Web service, how to receive JSON 【发布时间】:2012-07-17 01:25:38 【问题描述】:我用 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 对象?
谢谢
【问题讨论】:
你打开你是用jQuery来调用你的动作吗? 是的。我现在将在原始帖子中编辑我的 jquery 代码。 firebug 显示该链接是一个 http 错误 400 错误请求。 【参考方案1】:您应该在方法中使用 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 将负责将 post 中的 json 反序列化到您的模板。
[HttpPost]
public string Search(SearchObject json)
return "Asdasd";
您可以尝试 fiddler,用于发出 post 请求,在请求标头中指定类型:
内容类型:应用程序/json
并在请求正文中粘贴您的 json,然后执行
【讨论】:
【参考方案2】:看起来您已经收到了回复,但这里是有效解决方案的代码:
注意:我在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>
希望这会有所帮助...
【讨论】:
在 Web API,MVC 4 中,您可以简单地从动作中返回一个对象,它会根据请求返回 json 或 xml。例如IE 会得到 json,chrome 会得到 xml 结果 是的 - 我知道 Web API。当我写我的例子时,我没有在原始问题中看到那个细节。 @Habib /GlennFerrieLive 谢谢你们的帮助。我能够把它修好。不过我有一个问题,你说如果你只是用 Web API 返回一个对象,它会返回 JSON 到 IE 和 XML 到 chrome?如果您编写的客户端 javascript 解析 json 怎么办?您是否必须编写 javascript/query 才能接受其中任何一个? @user 接受标头将规定您收到的格式。这就是它的目的。您应该能够在两个浏览器中获得相同的响应。请参阅我的“$.ajaxsetup”声明中的“接受”以上是关于C# Web 服务,如何接收 JSON的主要内容,如果未能解决你的问题,请参考以下文章
通过 Web Socket 网络在 C# 服务器上传输 JSON 字符串数据
如何使用 Jersey API 从 RESTful Web 服务发送和接收 JSON 数据
C# Rest 服务 - 无法在服务方法中接收 JSON 请求