C#Web服务,如何接收JSON

C# Web service, how to receive JSON

本文关键字:何接收 JSON 服务 C#Web      更新时间:2023-11-25

我用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,用于进行post请求,在请求标头中指定类型:

内容类型:application/json

并在请求正文中粘贴json,然后执行

看起来您已经得到了响应,但下面是一个有效解决方案的代码:

注:我在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>

希望这能帮助。。。