WebApi传递JSON参数

开发过程中经常进行JSON的传递,在WebApi中传递JSON字串时,会发现服务器端接收到不参数值,看下面代码

服务端:

public void Post([FromBody]string value)
        {
            LoggerHelper.Info("Post:{0}", value);
        }

客户端:

HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            string url = "http://api.oa.com/api/Test/Post";

            var json = "{ \"Name\": \"Test\" }";
            var httpContent = new StringContent(json, Encoding.UTF8);
            httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json");
            var response = client.PostAsJsonAsync(url, httpContent).Result;
            if (!response.IsSuccessStatusCode)
            {
                Response.Write(string.Format("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase));
            }

运行客户端,查看服务端的日志,结果为“Post:”,调用成功,但参数接收失败。

查了些资料,显示WebApi不支持JSON字串做为简单参数传递,既然如此就将JSON字串做为复杂类型进行传,对代码稍做调整,服务端接收JObject参数:

public void Post([FromBody]JObject value)
        {

            LoggerHelper.Info("Post:{0}", value.ToString());
        }

客户端:

HttpClient client = new HttpClient();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            string url = "http://api.oa.com/api/Test/Post";

            var json = "{ \"Name\": \"Test\" }";
            var jObject = JObject.Parse(json);
            var response = client.PostAsJsonAsync(url, jObject).Result;
            if (!response.IsSuccessStatusCode)
            {
                Response.Write(string.Format("{0} ({1})", (int)response.StatusCode, response.ReasonPhrase));
            }

运行客户端,再次查看服务端的日志,结果为:

Post:{
"Name": "Test"
},参数传递成功

时间: 2024-08-09 23:49:27

WebApi传递JSON参数的相关文章

c# HttpWebRequest 模拟HTTP post 传递JSON参数

//HTTP post   JSON 参数        private string HttpPost(string Url, Object ticket)        {            DataContractJsonSerializer serializer = new DataContractJsonSerializer(ticket.GetType());            MemoryStream stream = new MemoryStream();        

Asp.Net WebAPI传递json对象、后台手动接收参数

1.前台代码 /* * 跨域请求Post * 1个对象参数,后台JObject接受 */ $.post(apiUrl.getOne("PostFourth"), { name: '张三', age: 12 }, function (data) { alert(data); }); $.ajax({ url: apiUrl.getOne("PostFourth"), data: { name: '张三', age: 12 }, type: 'post', succes

.net WebAPI 传递对象参数

经过试验发现,客户端传递的json数据中,多一个属性不会影响. 少一个属性,也能够正常转换为对象,少的属性会为null. 当我服务端接受一个集合类型的时候, public HttpResponseMessage PutData(IEnumerable<ClientExpConfigRequestModel> requestModels) { var httpStatusCode = HttpStatusCode.OK; return new HttpResponseMessage(httpSt

HighChart 体验之旅 (后台传递JSON参数和数据的方法)

转自:http://www.cnblogs.com/daviddai/archive/2013/04/12/Highchart.html 官网:http://www.highcharts.com/ 中文网:http://www.hcharts.cn/ <%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="Syste

Android访问WEBAPI,传递json

public static String sendHttpRequestByPost(final String address,String encode,MatterReflectDTO dto){ String result = ""; DefaultHttpClient defaultHttpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(address); String jsonString

Spring MVC —— 前后台传递JSON

1. 传递JSON参数 vardata = {'id':1,'name':'abc'}; $.ajax({ type:'post', url:'homePageAction.do?testAJax', contentType:'application/x-www-form-urlencoded', data:JSON.stringify(data), success:function(data){ console.log(data.msg); }, error:function(){ } });

JSP+AJAX获取或者传递JSON对象以及参数

commodityList.jsp 第一步:创建 名为"ajax" 的 Java Web项目. 第二步:加入struts2的jar包,这里需要四个包 freemarker.jar  ognl.jar  struts2-core.jar  commons-fileupload.jar  commons-io.jar   xwork-core-2.1.6.jar(这个包加上版本号,是因为下文要提到它),这六个包是struts必须依赖的jar包,什么好说的. 第三步:修改 web.xml 加

springMVC传递JSON格式数据

这两天在使用SpringMVC传递JSON数据格式,出现了各种令人头大的问题,但是功夫不负有心人,最后还是解决了问题.在这里记录下来供大家参考,如有不对,还请各位大侠指正. 在SpringMVC传递JSON数据格式需要加入两个jar包:com.springsource.org.codehaus.jackson-1.4.2.jar,com.springsource.org.codehaus.jackson.mapper-1.4.2.jar. 实体JavaBean:Person  具有tname,g

url 传递中文参数乱码问题的终极解决方法。

估计很多人在做web开发的时候,都会碰到过url传递中文参数,有时候会出现乱码的问题,但有些项目或者环境,又不会有问题.当遇到乱码的时候,上网找了很多解决方案,比如: 页面设置它的编码方式,改成utf-8 或者gb2312. encodeURI(url),也有人说要2个encodeURI,如:window.location.href = encodeURI('b.html?cId='+id+"&cName="+encodeURIComponent(name)); 然后后台Str