精华内容
下载资源
问答
  • WebAPI 接收js传过来的对象数组数据 百度 Google了一整天 终于 在晚上聊天的时候弄出来了 所以得出结论 写代码一定要分心 结果才能出来 说一下我的需求 需要将如下图的对象数组传递到webapi那边接收 然后进行操作 ...

    WebAPI 接收js传过来的对象数组数据

    百度 Google了一整天 终于 在晚上聊天的时候弄出来了 所以得出结论

    写代码一定要分心 结果才能出来

    说一下我的需求
    需要将如下图的对象数组传递到webapi那边接收 然后进行操作
    在这里插入图片描述
    思路:

    • post是肯定的
    • 数组直接传 但是始终接收不到 可能是技术不够
    • 那就转为json格式传 接收格式传在后台接收到的是空数据 长度为0
    • json应该没问题 应该是接收有问题 挨个去试 string[] string object List… 还是没出来 要么null要么0
    • 回过头来看js 突然看到借鉴文档的最后一个 emmm 指定请求的头的Content-Type值
    • 好叭 传的是json 但是服务器不知道啊

    最后上代码:

    $.post({
         url: "https://localhost:44319/api/Home/AddSongList",
         // 转json数据
         data: JSON.stringify(SongList),
         // 就是这里了 contentType属性告诉服务器,我们正在以JSON格式发送数据。
         // 如果检查Ajax请求的头,可以看到Content-Type值设置为application/json.
         contentType: "application/json",
         // dataType: "json",
         // 防止深度序列化
         traditional: true,
         success: function (data) {
             console.log(data)
         }
     })
    

    注意:

    • [FromBody]
    • object
    [HttpPost]
    public string AddSongList([FromBody]object json)
    {
        Console.WriteLine(json);
        return "添加成功";
    }
    

    顺便提一句
    我js提交的数据是由网络上ajax获取到的数据重新拼成的 直接使用JSON.stringify 可能后台代码无法获取数据 是因为ajax是异步的

    解决办法:
    Ajax请求从异步改为同步
    设置 setTimeout 延迟执行或者把提交到后台的ajax写成回调函数
    如下图
    addInfo回调方法

    由于进行了ajax的嵌套调用 最终还是用到了 async/await …
    最后呢 就是数据成功出来了 因为需要遍历调用ajax 一次完整的事件大概调了60来次 所以时间消耗…
    没办法 有别的办法了再优化

    在这里插入图片描述
    可能还有别的比较好的方法 这里只是自己琢磨出来的 由好方法可以扣我

    借鉴文档:

    WebApi如何接收前台传递过来的数组:
    https://www.cnblogs.com/guo-xu/p/12147402.html

    js 数组、对象转json 以及json转 数组、对象:
    https://www.cnblogs.com/Im-Victor/p/9431718.html

    WebApi FromBody参数:
    https://blog.csdn.net/bafnypeu/article/details/78262684

    如何将JSON POST数据作为对象传递给WebAPI方法?:
    其中 慕桂英4014372 的回答
    http://www.imooc.com/wenda/detail/571372

    展开全文
  • 接收前端Post来的Json对象,一直转换为空,就是Json对象无法成功转换成当前对象 检查我们的模型类数据类型,...如果前端给我们的float类型传了一个空字符串,将转换报错,所以导致我们的接口接收对象一直为Null ...

    接收前端Post来的Json对象,一直转换为空,就是Json对象无法成功转换成当前对象

    检查我们的模型类数据类型,将其设置为可null,或者全部设置为string,即可。

    如果前端给我们的float类型传了一个空字符串,将转换报错,所以导致我们的接口接收对象一直为Null

    展开全文
  • 作者:beetlex链接:Webapi管理和性能测试工具WebBenchmark - beetlex - 博客园来源:博客园著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。WebBenchmark是一款基于开源通讯组件Beetlex扩展...
    作者:beetlex
    链接:Webapi管理和性能测试工具WebBenchmark - beetlex - 博客园
    来源:博客园
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    WebBenchmark是一款基于开源通讯组件Beetlex扩展的Webapi管理和性能测试工具(在技术上是beetlex webapi和vuejs的结合),在传统工具中一般管理工具缺乏性能压测能力或有性能测试的缺少管理功能;WebBenchmark的设计目标是就管理和性能压测能力同时具备。接下来介绍一下工具的功能和使用:
    功能

    • 支持HTTP和HTTPS的服务测试
    • 暂只支持基础方法的GET,POST,PUT和DELETE
    • 支持多用户和多分类管理
    • 提供访问API详细时间线信息
    • 提供值函数支持,可以更好地进行随机性数据构建和压测
    • 支持多用例同时压测
    • 提供详细的响应状态和各延时汇总

    安装
    工具是基于.netcore开发,可以运行在安装有.net core 2.1或更高版本的各大平台上。可以到 https://gitee.com/ikende/WebBenchmark 下载最新版本的压缩包,根据不同平台运行run.shrun.bat.工具默认占用80端口,如果存在端口被占用问题可以编辑以上两个文件修改对应启动端口。 启动后可以通过浏览器访问相关服务,初始的用户名和密码是:admin123456.进入服务后工具界面如下:

    abb455f215d1f5595c9e79bce2ca477b.png


    新建用例
    工具的首页面是基础用例管理,在这里可以添加、管理和测试webapi的用例 ;通过点击添加按钮可以新增一下基础的测试用例

    cdaee97d4ae5bdd95c7e9782b7684d3f.png


    添加的信息主要包括有基础用例信息和相关HTTP请求内容描述。

    • 地址参数
      主要是包括在Url里面的参数,参数可以根据自己的需要来添加并设置. 参数值支持函数引用,通过函数即可以在每次请求的都产生新的函数值进行提交。

    fe0624688bdfd861be0b62b1509d7cf4.png
    • 请求头
      主要可以添加一些请求头信息,如token和User-agent等。

    8a7574edfcbe4e2e9acb70b370a6b5af.png
    • 请求内容
      工具暂只支持application/jsonform-urlencoded两种,工具还专门为json提供更简便和具备验证能力的编辑器方便录入

    efee0a1c04ff754958b2e4449b2f04df.png
    • 测试
      组件在编辑的时候就对当前用例进行一个测试,通过测试可以了解到当前用例运行的实际情况(包括整个测试过程的一些网络请求响应时间线).

    9bf36c9828e14661229d092c93972313.png

    批量测试
    工具支持单个或批量测试用例,只要选择相关用例进行批量测试即可;批量测试完成后即可实时查看每个用例的测试情况和相关处理时间线。

    4898692543e0b028906e518c5d63298f.png


    性能测试
    工具提供多用例组合性能测试,只需要在创建性能测试用例时选择需要压测的用例即可。

    b9e2a8680d3f190d56c96fe28f7cac1c.png


    保存好相关性能测试用例即保存到相关列表中

    edb92a6c30d9bec1608785b9874f6367.png


    这时候就可以点击相关用例测试按钮进入到性能测试页面

    d72da02881bf17173828141e0acf8657.png


    这时候可以根据自己需求设置相关并发测试的数据进行一个压力测试。

    b9b5f5b3ff23442734df3c98e22df26d.png


    工具在测试过程中实时反映当前压测的结果,并把相关状态和相应延时分布数据详细显示出来。如果想查看压测过程中某个请求的详细情况,可以点击相关用例 即可显示该用户的详细情况

    64a43a41719993ad3f94b4dd0e3f7e4a.png


    以上是工具使用的相关介绍,有些功能在免费版本中受限。想更多了解可以查看在线演示 http://webbenchmark.beetlex.io/

    展开全文
  • 提升WebAPI性能的几个小建议原文来自互联网,由长沙DotNET技术社区编译。本文作者:德本德拉·达什(Debendra Dash)原文来自:...

    提升WebAPI性能的几个小建议

    6d3721a629344fa78dfb6007be2cd017.png

    原文来自互联网,由长沙DotNET技术社区编译。 

    本文作者:德本德拉·达什(Debendra Dash)

    原文来自:https://www.c-sharpcorner.com/article/Tips-And-Tricks-To-Improve-WEB-API-Performance/

    Web API是Microsoft作为.NET框架的一部分而开发的一项技术,它使用户能够与异构平台进行通信,包括网站,移动设备和桌面应用程序等。在编写Web API时,我们应该关注其性能和响应时间。在这里,我列出了在提高Web API性能时需要考虑的几点。

    624be382d4777d48ba7446da5be291f3.png

    在Web API中使用并行编程

    Web API逻辑主要处理2个重要功能-将数据发布到服务器以进行插入或更新,以及从服务器获取数据。当我们有成千上万的记录要从服务器获取时,响应时间非常高。这是因为有时我们将不得不遍历数据源,进行几次更改,然后将数据发送到客户端。而且,一个简单的foreach循环是一个单线程循环,该循环逐个顺序处理数据以给出结果集。

    因此,在这种情况下,建议在从服务器获取数据时使用并行foreach循环。由于并行的foreach循环在多线程环境中工作,因此执行速度将比foreach循环更快。

    并行Foreach循环的执行过程

    ```c#List<Employee> li = new List<Employee>();  li.Add(new Employee { Id = 1001, Name = "Sambid", Company = "DELL", Location = "Bangalore" });  li.Add(new Employee { Id = 1002, Name = "Sumit", Company = "DELL", Location = "Bangalore" });  li.Add(new Employee { Id = 1003, Name = "Koushal", Company = "Infosys", Location = "New Delhi" });  li.Add(new Employee { Id = 1004, Name = "Kumar", Company = "TCS", Location = "Bangalore" });  li.Add(new Employee { Id = 1005, Name = "Mohan", Company = "Microsoft", Location = "Hyderabad" });  li.Add(new Employee { Id = 1006, Name = "Tushar", Company = "Samsung", Location = "Hyderabad" });  li.Add(new Employee { Id = 1007, Name = "Jia", Company = "TCS", Location = "Pune" });  li.Add(new Employee { Id = 1008, Name = "KIRAN", Company = "CTS", Location = "Bangalore" });  li.Add(new Employee { Id = 1009, Name = "Rinku", Company = "CGI", Location = "Bangalore" });  ```

    这是Employee类:

    public class Employee  {      public int Id { get; set; }      public string Name { get; set; }      public string Company { get; set; }      public string Designation { get; set; }      public string Location { get; set; }  }  

    这就是我们可以使用Parallel Foreach循环的方式。 

    4d7cc7d9c76786bb7246bc89461f9b6d.png

    该循环将立即执行并给出结果。在Foreach循环的情况下,它一一给出结果。假设结果集中有1000条记录,则循环将执行一次1000次以得到结果。

    注意: 当您要获取的记录数量很少时,请不要使用Parallel foreach循环。

    使用异步编程来处理并发的HTTP请求

    同步编程中发生的事情是,每当有请求执行Web API时,就会将线程池中的线程分配给要执行的请求。该线程被阻塞,直到执行该过程并返回结果为止。

    592d93ebd1bc6c8cc20386915f372449.png

    在这里,T2 线程一直处于阻塞状态,直到它处理请求并返回结果为止;如果遇到长的执行循环,则它将花费大量时间并一直等待到结束。

    假设我们只有3个线程,并且所有线程都已分配给队列中正在等待的三个请求。在这种情况下,如果第四个请求在我们同步实现时出现,它将发出错误,因为现在它没有任何线程可以处理该请求。

    因此,要处理更多数量的并发HTTP请求,我们必须使用异步编程。

    异步请求处理程序的操作有所不同。当请求到达Web API控制器时,它将获取其线程池线程之一,并将其分配给该请求。

    在进程开始执行的同时,线程将返回到线程池。执行完成后,为该请求分配了另一个线程来带来该请求,因此,该线程将不会等到进程执行完成后才返回到线程池以处理另一个请求。

    57a345bf564ea268252acde38f3fcf2d.png

    因此,在这里我给出了一个小的注册示例,以及如何在Web API中使用异步编程。

    [AllowAnonymous]  [Route("Register")]  public async Task<IHttpActionResult> Register(RegisterBindingModel model)  {      Dictionary<object, object> dict = new Dictionary<object, object>();      if (!ModelState.IsValid)      {          return BadRequest(ModelState);      }      var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };      IdentityResult result = await UserManager.CreateAsync(user, model.Password);      if (result.Succeeded)      {          tbl_Users obj = new tbl_Users();          obj.Active = false;          obj.FirstName = model.FirstName;          obj.LastName = model.LastName;          obj.Email = model.Email;          obj.UserId = user.Id;          DefEntity.tbl_Users.Add(obj);          if (DefEntity.SaveChanges() == 1)          {              dict.Add("Success", "Data Saved Successfully.");              return Ok(dict);          }          else          {              return Content(HttpStatusCode.BadRequest, "User Details not Saved.");          }      }      else      {          return GetErrorResult(result);      }  }

    压缩Web API的结果

    Web API压缩对于提高ASP.NET Web API性能非常重要。在Web中,数据以包(数据包)的形式通过网络传输,从而增加了数据包的大小,这将增加大小并增加Web API的响应时间。因此,减小数据包大小可提高Web API的加载性能。

    通过压缩API响应,我们具有以下两个优点。

    数据大小将减小响应时间将增加(增加客户端和服务器之间的通信速度。)我们可以通过编码和IIS中的某些设置来压缩Web API。我已经在以下链接中介绍了使用编码对Web API进行压缩的方法。

    1.使用DotNetZip压缩Web API响应[1]压缩Web API响应[2]

    同样,我们可以通过检查动态内容压缩模块来启用IIS压缩 。 

    bffd1de016b96d97500c8554d08bebf3.png

    因此,通过这种方式,我们可以压缩Web API响应以实现性能。

    使用缓存提高性能

    缓存是一种在一定时间段内将常用数据或信息存储在本地存储器中的技术。因此,下一次,当客户端请求相同的信息时,它将从本地内存中提供信息,而不是从数据库中检索信息。缓存的主要优点是它通过减少处理负担来提高性能。我们有几种方法可以在Web api中实现缓存。在下面的链接中,我描述了一种实现缓存的方法。

    在Web API中实现缓存[3]因此,在这里您将找到我们如何在Web API中实现缓存以及它将如何帮助提高性能。

    使用高速JSON序列化器

    我们经常使用JSON而不是XML来在服务提供者和服务客户端之间交换数据。首先,我们使用它是因为JSON是轻量级的。

    在.NET中,有很多序列化器。最受欢迎的是Json.NET,Microsoft选择它作为Web API的默认JSON序列化器。Json.NET之所以出色,是因为它快速,健壮且可配置。

    有几种序列化器比Json.Net更快。下面提到其中一些。 

    de942740f94de50b60c05e7b0cf7eac1.png

    我们可以看到Protobuf-Net和JIL是非常快速的序列化程序,因此,如果可以代替Json.net来实现它们,则显然可以提高性能。协议缓冲区或Protobuf是Google的官方序列化程序。要在.Net中使用JIL序列化程序,我已经写了一篇文章,您可以在下面的链接中进行检查。

    在C#中使用Jil序列化器和反序列化器库[4]

    创建适当的数据库结构

    为了提高任何应用程序的性能,我们应该将重点放在数据库结构上。我可以说数据库结构在提高性能方面起着重要作用。这些是我们在处理数据库时应检查的一些注意事项。

    尝试使规范化表结构。为所有表提供适当的索引,以便从表中轻松搜索结果。将所有相互关联的表与外键和主键相关联。我认为在创建数据库结构以提高性能时,我们必须至少遵循这三个规则。

    尝试从客户端验证某些属性

    从客户端而不是服务器端验证某些模型属性非常好。一旦我们在未经客户端验证的情况下放置了无效数据,则它将进入服务器并检查其是否为有效数据。如果它是无效的数据,它将从服务器给出错误。因此,在这里我们可以使用客户端验证检查往返行程。因此,如果我们可以通过客户端(移动设备,网站等)进行任何可能的验证,那将是很好的。

    318557de0de549d5913bf2cbef7be490.png

    因此,我认为,如果我们专注于以上讨论的要点,则可以以某种方式提高Web API的性能。

    References

    [1] 使用DotNetZip压缩Web API响应: http://www.c-sharpcorner.com/article/compressing-web-api-response-to-using-dotnetzip/[2] 压缩Web API响应: http://www.c-sharpcorner.com/article/compressing-web-api-response-part-two/[3] 在Web API中实现缓存: http://www.c-sharpcorner.com/article/implementing-caching-in-web-api/[4] 在C#中使用Jil序列化器和反序列化器库: http://www.c-sharpcorner.com/article/working-with-jil-serializer-and-deserializer-library-in-c-sharp/

    展开全文
  • webapi接收集合数据

    千次阅读 2018-04-26 14:51:32
    最近在做一个项目,前端(angularjs)需要传递批量数据到webapi。开始想已Get方式提交,结果是单个对象(没问题,但是多个对象集合一起传递时,找不到api方法。 (单对象序列化后的JSON:"[{"REMARK":&...
  • url: "http://localhost:9261/api/User/ttt", dataType: "json", data: {s:JSON.stringify(tt)} , success: function (data) if (data.message != "success") { alert(data.message); } } }); ...
  • 开发环境Visual Studio 2019.net core 3.0打开vs2019新建项目具体步骤如下图:第一步创建新项目第二步选择ASP.NET Core Web...如下图:XXX webapi运行项目F5运行项目,然后就可以看到微软为我们写好的一个天气预报示...
  • webapi 控制器接收POST参数时必须以对象的方式接收 转载于:https://www.cnblogs.com/xiaoshi518/p/4763168.html
  • webapi参数对象为空的的处理

    千次阅读 2018-12-12 14:33:20
    最近做一个小即时通讯程序,考虑到服务资源和实际使用情况,使用的心跳包实现,结果测试时,发现发送消息到webapi后,消息对象始终为空,仔细检查了各个环节,所有问题都排查了一遍,还是没有接收到提交的消息数据。...
  • WebAPI Post接收数据

    2019-10-08 23:14:35
    近日在写某开源商城的webapi接口,由于刚接触所以碰到某些问题,如post数据的接收啊等。在网上查询资料时给出了三种方式。 1.给多个数据对象封装成一个对象进行接收([frombody]标签只能用于一个参数具体看上篇博文...
  • 前端传一个json对象,后端用字典接收 byte[] data = new byte[HttpContext.Current.Request.InputStream.Length]; HttpContext.Current.Request.InputStream.Read(data, 0, data.Length); string txt = ...
  • 不知道大家有没有注意过对象中的一些通用方法,例如所有所有的对象都有 toString、constructor 等等一些方法。当然如果要仔细看的话,大家可以:var a = {}; console.log(a);我们可以清晰的看到他有很多的内置方法。...
  • 1.前台代码 ...* 1个对象参数,后台JObject接受 */ $.post(apiUrl.getOne("PostFourth"), { name: '张三', age: 12 }, function (data) { alert(data); }); $.ajax({ url: apiUr...
  • 先运行 web端 然后执行winform端 可以下断查看传输的数据,发送对象,接收对象
  • WebApi提供的接口一多,就发现一个问题,我们项目中有很多接口是接收POST(安全原因,我们采用的是https)请求的,而且入参基本也就是一两个参数。在开发的后期发现WebApi中有很多对象,多到已经快到了难以管理的...
  • 前端: 注意两个点: 1.contentType: "application/json...2. 要用JSON.stringify(customer)序列化对象成str传递 $(function () { var customer = {contact_name :"Scott",company_name:"HP"}; $.ajax({ ...
  • WebApi传值、接收值的问题

    千次阅读 2013-07-24 16:31:25
    先前在网上看的一段代码 ,一直不知道JsonObject是什么对象 [HttpPost] public async void submitForm() { StringBuilder sb = new StringBuilder(); HttpContent content = Request.Content;
  • 这是Js文件,先通过$.get来向controler发送请求 $(document).ready... $.get("/api/menu/", function (data) { //data是string类型的json var zNode = JSON.parse(data); //将json字符串转换成json对象 ...
  • Web API初探

    2016-12-26 14:46:00
    前几天有位同事说web api中的接口参数为对象的时候不好接收,具体什么方式我忘记了,虽然本人以前并没有接触过这方面的知识,但是据说和MVC差不多的,今天小小的研究一下,我想应该是可以的。 直接新建一个WEB API...
  • 现在,我们的Web API暴露数据库实体给客户端,而客户端接收直接映射到你的数据库表的数据。然而,这不永远都是个好办法。有时候你可以想要改变发送到客户端的数据的形式。例如,你可以想要: 1, 移除环形引用(见...
  • 本人刚接触asp.net web api,没有经验,我想用Get方法来解决这个问题,我开始把 参数都放在URI中,接收的照片数据长度不足,于是我想把参数组成一个自定义对象放 在请求消息主体里面,请问怎么才能实现呢,非常感谢...
  • WebAPI传参

    2017-11-27 18:09:00
    1.GET请求传递参数 URL传参:... API接收参数 [HttpGet] public string GetUser(int id) { return "User:" + id; } 传递JSON对象: $.ajax({ type: "get", url: "http://localhost/Api...
  • Web API的参数

    2018-06-13 01:27:06
    先声明:我的路由模板是加了action的 : routeTemplate...,Get请求:如果用模型对象接收数据,则必须在模型对象类前标注[FromUri]namespace WebApi.Controllers { public class Login { public string userNam...
  • Asp.Net WebApi+JQuery Ajax的Post请求整理 ...2.WebApi 接收Post提交参数需要指定([FromBody] string name)3.WebApi 中如果只接收一个基础类型参数,不能指定key的名称4.WebApi Post请求Action只能接收一...
  • GET请求的参数是通过URL来传递的,而POST请求则是通过HTTP的请求体中传过来的,.Net WebAPI的POST请求也需要从HTTP的请求体里面去取参数。传输单个值时,可以通过URL参数或者FromBody来传输接收,那么传输多个值时...
  • 1.WebApi 默认支持Post提交处理,返回的结果为json对象,前台不需要手动反序列化处理。 2.WebApi 接收Post提交参数需要指定([FromBody] string name) 3.WebApi 中如果只接收一个基础类型参数,不能指定key的名称 4....

空空如也

空空如也

1 2 3 4 5 ... 13
收藏数 246
精华内容 98
热门标签
关键字:

webapi接收对象