一般的我们可以直接使用参数来接受,这个就不多介绍了

    [HttpGet]
public IHttpActionResult Test2([FromUri]string name)
{
object obj = new
{
name = "sss",
age = ,
sex = true
};
return Ok(new { errcode = , data = obj });
} [HttpPost]
public IHttpActionResult Test3([FromBody]string name)
{
throw new Exception("嘻嘻嘻");
} /// <summary>
/// 返回强类型
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
[HttpGet]
public CommonOutDto Test4([FromUri]string name)
{
CommonOutDto outDto = new CommonOutDto();
outDto.errcode = ;
return outDto;

现在一般使用json来传递参数,如果使用强类型,需要我们把类的属性和参数名设置一样就可以了。get,post都可以,这里只演示了post请求

①使用参数名来接受,这样显示不管你是传递json字符串还是json对象都是接收不到的

 [HttpPost]
public IHttpActionResult Test4([FromBody]string json)
{
throw new Exception("嘻嘻嘻");
}

②稍微改动下,把参数类型换成objct,这样我们不管是传递json对象和字符串都是能够接受到的

 [HttpPost]
public IHttpActionResult Test4([FromBody]object json)
{
throw new Exception("嘻嘻嘻");
}

json对象;

json字符串:

正解:普通的两种使用方式

     /// <summary>
/// 如果没有定义Dto类型
/// </summary>
/// <param name="json">json数据</param>
/// <returns></returns>
[HttpPost]
public IHttpActionResult Test3([FromBody]object json)
{
JObject @object = JObject.Parse(json.ToString()); return Ok(@object);
} /// <summary>
/// 定义了Dto类型
/// </summary>
/// <param name="inDto">
/// 根据json 定义的类
/// </param>
/// <returns></returns>
[HttpPost]
public IHttpActionResult Test4(ToiletInfoInDto inDto)
{
// CommonOutDto 为自定义的返回类
CommonOutDto outDto = new CommonOutDto();
outDto.dataStr = "请求成功";
outDto.errcode = ;
return Ok(outDto);
}
ToiletInfoInDto :
  /// <summary>
/// 厕所信息
/// </summary>
public class ToiletInfoInDto
{
/// <summary>
/// 厕所编号
/// </summary>
public string CsNum { get; set; } /// <summary>
/// 厕所名称
/// </summary>
public string CsName { get; set; } /// <summary>
/// 百度经度
/// </summary>
public string CoordX { get; set; } /// <summary>
/// 百度纬度
/// </summary>
public string CoordY { get; set; } /// <summary>
/// 厕所等级
/// </summary>
public string Rank { get; set; }
}
CommonOutDto:
  /// <summary>
/// 返回公共类
/// </summary>
public class CommonOutDto
{
public int errcode { get; set; } public string dataStr { get; set; } public string errmsgStr { get; set; }
}

③mvc中也可以写接口,我们肯定使用过流接受过参数,那webapi中同样是可以的

mvc中可以直接写:

 string json2 = new StreamReader(Request.InputStream).ReadToEnd();

webapi中没有 HttpContext这个,我们可以引用进行使用

  //引用 using System.Web;
string json2 = new StreamReader(HttpContext.Current.Request.InputStream).ReadToEnd();

webapi中我们使用request强制同步获取数据,显示获取不到

   //强制同步获取不到数据
string aa = this.Request.Content.ReadAsStringAsync().GetAwaiter().GetResult();

推荐:使用异步的方式

        /// <summary>
/// 使用objct接受
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
[HttpPost]
public async Task<IHttpActionResult> TestAsync([FromBody]object json)
{
JObject @object = JObject.Parse(json.ToString());
return await Task.FromResult<IHttpActionResult>(Ok(@object));
} /// <summary>
/// 使用强类型接受
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IHttpActionResult> TestAsync2(ToiletInfoInDto inDto)
{
return await Task.FromResult<IHttpActionResult>(Ok(inDto));
} /// <summary>
/// 使用读取数据的方式
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<IHttpActionResult> TestAsync3()
{
string aa = await this.Request.Content.ReadAsStringAsync();
return await Task.FromResult<IHttpActionResult>(Ok(aa));
} /// <summary>
/// 使用强类型接受,返回强类型 推荐这种,输入,输出都新建一个对应的Dto进行处理
/// </summary>
/// <param name="inDto">输入类</param>
/// <returns>输出类</returns>
[HttpPost]
public async Task<CommonOutDto> TestAsync4(ToiletInfoInDto inDto)
{
CommonOutDto outDto = new CommonOutDto();
outDto.errcode = ;
return await Task.FromResult(outDto);
}

显示结果:

 

可以看到我们的 TestAsync2 接口中,我们的属性小写了,这是自己序列化json数据造成的,俗称:驼峰式。  当然这个是可以设置的,我们在webapiConfig.cs 中可以设置我们的json的属性
  public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{ // Web API 配置和服务 // Web API 路由
config.MapHttpAttributeRoutes();
//多添加一个action
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// 干掉XML序列化器 两种都可以
//GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
config.Formatters.Remove(config.Formatters.XmlFormatter); //配置json数据格式
JsonMediaTypeFormatter jsonFormatter = config.Formatters.JsonFormatter;
//忽略循环引用,如果设置为Error,则遇到循环引用的时候报错(建议设置为Error,这样更规范)
jsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Error;
//日期格式化,默认的格式也不好看
jsonFormatter.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
// 对 JSON 数据使用混合大小写。跟属性名同样的大小.输出
jsonFormatter.SerializerSettings.ContractResolver = new DefaultContractResolver();
//json中属性开头字母小写的驼峰命名
//jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
}

总结:

1:一般的我们使用Object类型或者强类型来接接收

2:提高效率,我们是异步

题外:我们一般都会准备一个Dto来接受我们的json对象,如果你不想这样写,也可以使用JObject来用。

webapi 获取json数据的更多相关文章

  1. Netflix Falcor获取JSON数据

    Netflix开源了JavaScript库Falcor,它为从多个来源获取JSON数据提供了模型和异步机制. Netflix利用Falcor库实现通过JSON数据填充他们网页应用的用户界面.所有来自内 ...

  2. jquery通过ajax方法获取json数据不执行success

    1.jquery通过ajax方法获取json数据不执行success回调 问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准 ...

  3. jquery用ajax方式从后台获取json数据,将内容填充到下拉列表。

    从后台获取json数据,将内容填充到下拉列表. url:链接 par:ID sel:下拉列表选择器 //获取下拉列表 function BuildSelectBox(url, par, sel) { ...

  4. JQuery 获取json数据$.getJSON方法的实例代码

    这篇文章介绍了JQuery 获取json数据$.getJSON方法的实例代码,有需要的朋友可以参考一下 前台: function SelectProject() { var a = new Array ...

  5. Jquery 模板插件 jquery.tmpl.js 的使用方法(1):基本语法,绑定,each循环,ajax获取json数据

    jquery.tmpl.js 是一个模板js  ,主要有2个方法 (1):$.template()方法,将一段script或者是Html编译为模板,例如 $.template('myTemplate' ...

  6. android客户端从服务器端获取json数据并解析的实现代码

    今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下   首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的U ...

  7. jquery通过ajax方法获取json数据不执行success回调

    问题描述:jquery通过ajax方法获取json数据不执行success回调方法 问题原因:json格式存在问题或不符合标准写法,导致总是执行error回调方法 解决方案:使json格式务必符合下述 ...

  8. (转)android客户端从服务器端获取json数据并解析的实现代码

    今天总结一下android客户端从服务器端获取json数据的实现代码,需要的朋友可以参考下       首先客户端从服务器端获取json数据 1.利用HttpUrlConnection   复制代码 ...

  9. android客户端从服务器端获取json数据并解析的实现代码(重要)

    首先客户端从服务器端获取json数据 1.利用HttpUrlConnection /** * 从指定的URL中获取数组 * @param urlPath * @return * @throws Exc ...

随机推荐

  1. 前端学习之路之CSS (三)

    Infi-chu: http://www.cnblogs.com/Infi-chu/ 创建CSS有三种方法:外部样式表.内部样式表.内联样式.优先级:内联样式>内部样式>外部样式表> ...

  2. hadoop 3.0.0 alpha3 安装、配置

    1. 官网下载 wget  http://mirror.bit.edu.cn/apache/hadoop/common /hadoop-3.0.0-alpha3/hadoop-3.0.0-alpha3 ...

  3. 在WinServer上安装小红伞杀毒软件的经验总结

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在WinServer2008或WinServer2012不能直接安装小红伞杀毒软件的免费版,需要安装服务器版.我手头并 ...

  4. Spring boot 使用WebAsyncTask处理异步任务

    上文介绍了基于 @Async 注解的 异步调用编程,本文将继续引入 Spring Boot 的 WebAsyncTask 进行更灵活异步任务处理,包括 异步回调,超时处理 和 异常处理. 正文 1. ...

  5. k 近邻算法(k-Nearest Neighbor,简称kNN)

    预约助教问题: 1.计算1-NN,k-nn和linear regression这三个算法训练和查询的时间复杂度和空间复杂度? 一. WHy 最简单最初级的分类器是将全部的训练数据所对应的类别都记录下来 ...

  6. hack (浏览器兼容css hack)

    1.hack的原理 由于不同的浏览器对CSS的支持及解析结果不一样,还由于CSS中的优先级的关系.我们就可以根据这个来针对不同的浏览器来写不同的CSS. CSS Hack大致有3种表现形式,CSS类内 ...

  7. switch case 忘记 break

    昨天纠结了很久的问题,一直找不到原因,早上发现是一个低级错误: private void selectButton(int id) { switch (id) { case 0: recommend_ ...

  8. Android Studio最新稳定版下载 - 百度网盘(更新于2017年7月14日)

    Android Studio是一个为Android平台开发程序的集成开发环境,其包含用于构建Android应用所需的所有工具.Android Studio 2.3.3为最新稳定版(截止到2017年7月 ...

  9. 关于派生类访问基类对象的保护变量的问题 --Coursera

    https://class.coursera.org/pkupop-001/forum/thread?thread_id=350   郭天魁· 6 months ago 在课件中我们知道如下程序是不能 ...

  10. 路由协议RIP、EIGRP、OSPF

    前提 在网络拓扑中,我们经常多个路由连接不同子网,路由之间要转发不同子网的包,前提是路由之间要知道对方路由的存在. 因此这次我要写的是有关维护路由之间存在的协议,RIP.EIGRP和OSPF,静态路由 ...