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

    [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. About custom Theme and Style

    For android system, of course you can custom your own style and theme, but you can't break compatibi ...

  2. 怎么让div显示一行,其余的隐藏。

    <style> div{ white-space: nowrap; text-overflow:ellipsis; text-overflow: ellipsis; overflow:hi ...

  3. python 中str字符串 和list列表基本操作总结

    s = '#afsfdf222#' print(s.capitalize()) # 首字母大写其他字母小写 print(s.center(20, '%')) # 居中并在空白处添加指定字符 print ...

  4. echarts 表格与 div 之间 空白的设置

    一. options 图表选项,包含图表实例任何可配置选项: 公共选项 , 组件选项 , 数据选项 {Object} grid 二. grid 直角坐标系内绘图网格 名称 默认值 描述 {number ...

  5. Ubuntu / Raspberry 下切换GCC版本

    目前Ubuntu 自带的GCC版本为4.6,遗憾的是在实际使用时,反而版本越高越好问题越多,所以,一旦遇到编译问题时最好先检查你下载的工程里的readme,默认的编译器版本是否为当前的安装版本,如果不 ...

  6. maven项目怎么引入另一个maven项目

    yi      最近在做项目的时候,遇到多模块(mudul)开发,里面的maven包相互引用,刚开始不知道怎么导入,费了好大尽总算搞定了.把遇到的问题记录下. 1.怎么导入依赖的maven模块 选择I ...

  7. pt-archiver(数据导入导出工具)

    数据导入导出工具pt-archiver 工具可以将MySQL的表数据导出到一个新表或者一个文件,也有自己的应用场景,比如数据归档,删除数据,数据合并等. 具体用法: pt-archiver [OPTI ...

  8. 网络安全-使用HTTP动词篡改的认证旁路

    这个东西去年的安全扫描都没有,今天就扫出来了,非常奇怪的一个东西.好吧,找资料找原因.结果可能应为搜索名词的原因,这个问题在群友的帮助下解决了. 在我理解中servlet只有post和get方法,然后 ...

  9. task可声明参数 z

    直接这样写 var task1 = Task.Factory.StartNew(() => DoSomeWork(message1, message2)); 如果是winform,你在另外一个线 ...

  10. mysqldump导出sql文件中insert多行问题

    mysqldump为了加快导入导出,默认把数据都缩减在一行里面. 查看和修改不方便,为此,我们可以使用--skip-extended-insert选项来使导出的数据,是多行插入形式的. mysqldu ...