webapi 后台接受的数据类型_webapi前台传一个文件,后台接收 - CSDN
精华内容
参与话题
  • .NET WebAPI post参数传递

    万次阅读 2018-08-30 09:52:38
    dynamic动态类型(非跨域) 实体类 JObject参数(推荐) 1.键值对对应 这里所说的键值对并非是一般的键值对,是指键为空,值不为空的键值对 前台请求 $.ajax({ url: host + '/api/Source/TestParams', type...

    可行的传参形式

    1. 键值对对应
    2. dynamic动态类型(非跨域)
    3. 实体类
    4. JObject参数(推荐)

    1.键值对对应

    这里所说的键值对并非是一般的键值对,是指键为空,值不为空的键值对
    前台请求

    $.ajax({
        url: host + '/api/Source/TestParams',
        type:"post",
        data: { '': "Amon"},
        success: function(a) {
            console.log(a);
        }
    });

    后台
    这里写图片描述

    可以看到后台是接收到参数了的,但是这种方式只能传一个键值对参数,{'': 'Amon', '': 'male'} 这种参数是接收不到的,当然也可以把所有参数序列化为字符串,后台再进行反序列化,但是这种方式较为繁琐,所以不推荐

    2.dynamic 动态类型(非跨域)

    这种传参方式在非跨域环境下可行,但是在跨域环境下,前台请求时会出现 405 错误,虽然通过调整ajax请求参数会解决这个错误,但是后台无法正常接收参数
    前台请求

    $.ajax({
        url: host + '/api/Source/TestParams',
        type:"post",
        contentType: 'application/json',
        data: JSON.stringify({ 'name': "Amon", sex: 'male'}),
        success: function(a) {
            console.log(a);
        }
    });

    后台
    这里写图片描述

    当前传参方式在非跨域环境中测试为可以正常传参,跨域环境暂未找到解决方法,如果有解决方法,欢迎交流

    3.实体类

    实体类是相对来说比较简单的一种传参方式,跟我们平常采用的传参方式相似
    前台请求

    $.ajax({
        url: host + '/api/Source/TestParams',
        type:"post",
        data: { 'name': "Amon", sex: 'male'},
        success: function(a) {
            console.log(a);
        }
    });

    后台
    这里写图片描述
    这里写图片描述
    这种传参方式需要声明一个实体类,所以说在改变传参时,相应的要去更改实体类,灵活性不是很高

    4.JObject 参数(推荐)

    JObject传参方式是个人比较推荐的一种方式,前台请求传参写法不具迷惑性,后台接收也较为灵活
    前台请求

    $.ajax({
        url: host + '/api/Source/TestParams',
        type:"post",
        data: { 'name': "Amon", sex: 'male'},
        success: function(a) {
            console.log(a);
        }
    });

    后台
    这里写图片描述

    如果有其他的传参方式,欢迎交流

    展开全文
  • WebAPI请求——js调用

    万次阅读 2016-04-19 10:32:24
    http://www.cnblogs.com/babycool/p/3922738.html ...ASP.NET MVC学习系列(二)-WebAPI请求 ... MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理。 这里我
    
    

     继续接着上文 ASP.NET MVC学习系列(一)-WebAPI初探 来看看对于一般前台页面发起的get和post请求,我们在Web API中要如何来处理。

    这里我使用Jquery 来发起异步请求实现数据调用。

      继续使用上一文章中的示例,添加一个index.html页面,添加对jquery的引用。

     

    一、无参数Get请求

      一般的get请求我们可以使用jquery提供的$.get() 或者$.ajax({type:"get"}) 来实现:

      请求的后台Action方法仍为上篇文章中的GetUser() :

      也可以用$.ajax({type:"get"}) 方式,正确的获得了返回数据:

     

    二、传递一个参数的Get请求

      通常我们需要传递参数只需要指定ajax方法的data属性即可: data:{"name":"赵大宝"} 

      后台正确的返回数据:

     

    三、传递两个或多个参数的Get请求

      按照上面的方法,对于多个参数我们可以很容易就写出来: data:{"name":"赵大宝","age":12}

       后台正确的返回数据:

    四、无参数的Post请求

      我们可以使用$.post() 或$.ajax({type:"post"}) 来发起post请求:

      后台正确的返回了数据:

    五、传递一个参数的Post请求:

      首先这里需要提醒大家一下,我们在修改完后台代码后,如果没有重新生成项目,那么在请求时就会报错:“未找到与请求***匹配的HTTP资源” :

      所以,我们只要我们修改了后台代码,就一定要重新生成一下:

     

      不过,当我们重新生成项目,再次发送请求,看到的仍然是404错误,再次检查一番代码,也没有发现是哪里的问题。

      事实上,ASP.NET Web API能够正确的识别我们的UserController控制器处理Post /api/user ,但却不能找到一个可以接受的方法来处理请求。

    也就是说,Web API接收到的请求能够找到User控制器,但在该控制器中找不到名称为Def 的这个Action。

    那我们要怎么来解决呢?

    通过搜索MSDN上Web API官网中的说明,我们可以找到下面的一段介绍:

    在Action 方法中我们需要使用 [FromBody] 属性标签来标明属性

      修改后,再次发送请求,我们可以看到,Status Code 为200,请求发送成功。

      可以看到,在post请求中,方法的参数必须要用 [FromBody] 属性来修饰才可以, [FromBody] 就告诉Web API 要从post请求体重去获取参数的值。

    但让我们诧异的却是,后台返回的数据中name的值为空。

      通过调试,我们可以看到,后台Action 中接收到的name值为null。

     

      通过上面的测试我就也能够猜测到,Web API 要求请求传递的 [FromBody] 参数,肯定是有一个特定的格式,才能被正确的获取到。而这种特定的格式并不是我们常见的 key=value 的键值对形式。Web API 的模型绑定器希望找到 [FromBody] 里没有键名的值,也就是说, 不是 key=value ,而是 =value 。

    现在,咱们把data中的key设置为空,然后再次发送请求:

      测试可见,后台正确的接收到了数据:

     六、传递两个参数的Post请求

      按理说,一个参数的请求实现了,那么传递两个或者多个参数也就很顺利了,对于两个参数的后台接收方法,我们可能会这样来写:

    但事实证明,这样是错误的。

     

    那到底两个或者多个参数我们要怎样来定义呢?

    再次查看官网中的介绍,我们了解到:

      也就是说,[FromBody] 修饰的参数只能有一个。我们需要对传递的多个参数进行封装才行。

    这里,我们可以将 Name和 Age 封装成一个Student 类:

      前台页面再次发送请求:

      Status Code为200,请求成功,并正确获取到后台返回的数据:

     

      这里,我们通过上面图片中的请求头数据可以看到,Form Data 的格式是 key=value&key=value 这种表单数据格式 Name=%E8%B5%B5%E5%A4%A7%E5%AE%9D&Age=13 ,我们平时使用的比较多的一般为json格式。 这里,我们使用 JSON.stringify() 来序列化数据。

    再次发送请求:

      可以看到,From Data 中数据的格式为json字符串,Status Code为200,请求正确,但结果又出错了,后台又没有接收到数据参数:

    那么问题到底出在哪呢?

      我们再次查看上图中请求头内容,注意到,虽然我们传递的数据格式是json字符串,但请求头中的Content-type 却为 

    application/x-www-form-urlencoded ,并不是json格式对于的 application/json 。 而编码格式 application/x-www-form-urlencoded 表示的是:窗体数据被编码为名称/值对。 

      这里,也就是我想要说的一个注意点。平时我们在使用json数据的时候,很容易就忘记了 要指定 Content-type 为 "application/json" ,所以就容易导致很多“想不到”的错误。

    所以,我们在 $.ajax() 中指定 Content-type :

      这次,后台正确的接收并返回了数据:

     

    七、传递多个参数的Post请求

      有了上面的经验,传递多个参数的post请求我们就很容易能写出来了:

    后台接收并返回数据:

     

    八、传递多个不同对象的Post请求

      有时候我们还会遇到需要传递多个不同对象参数的情况,对于这种特殊的情况在 Json.Net 中为我们提供了一个 名为 JObject 的通用对象容器,我们可以通过 .对象名 的方式来动态的遍历参数里面的属性的值,然后动态的转换和json类型中对应的属性类型。

    比如:

    后台调试,通过dynamic 动态转换获取属性的值:

    后台正确的返回了数据:

     

    九、获取不同类型的数据

      一般我们获取到后台返回的数据格式类型为 json格式,我们也可以指定 请求头中的输出类型来获得不同的返回类型数据:

    指定输出类型为xml格式:

    指定输出类型为 json格式:

     

      基本到这里,这篇文章的主要内容也就算说完了,其中的重点还是 Post请求中对于参数的处理是需要重点注意的。

      上面我们在测试的过程中,都是通过自己创建的Controller控制器类来对参数进行接收处理,可能有人会问,我们这么写到底是否符合规范呢,Web API中默认是怎么来处理的呢? 这里,Visual Studio 中也为我们自带了 Web API控制器类:

    我们可以添加新建项选择 Web API控制器类 即可:

      这里我们可以看到,默认创建的Controller控制器类中,对于Post请求的Action方法都自带了 [FromBody] 属性。 现在不用我说,你也已经知道为什么 它会为参数默认带一个 [FromBody]属性吧!

    好了,今天的内容就到这里,下面附上我参考的几篇文章:

    MSDN中关于Web API 中 [FromBody] 的介绍: Parameter Binding in ASP.NET Web API | The ASP.NET Site 

    关于[FromBody]属性的介绍及Post参数说明(E文): Using jQuery to POST [FromBody] parameters to Web API | Encosia 

    上面网页文章的翻译版本:【翻译】使用JQuery POST表单到Web API | 北飘漂 

    Post 多个参数到Web API的总结: POST多个参数到Web API控制器方法总结 | 北飘漂

    附当前项目的代码:XWebAPIDemo-WebAPI请求

    转载请注明出处。

    展开全文
  • 接收前端Post来的Json对象,...检查我们的模型类数据类型,将其设置为可null,或者全部设置为string,即可。 如果前端给我们的float类型传了一个空字符串,将转换报错,所以导致我们的接口接收对象一直为Null ...

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

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

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

    展开全文
  • webapi接收上传的文件和相关参数

    千次阅读 2017-02-24 17:00:43
    [HttpPost] public IHttpActionResult TestPostFile() { string name = HttpContext.Current.Request["name"]; string age = HttpContext.Current.Request["age"];
    [HttpPost]
            public IHttpActionResult TestPostFile()
            {
                string name = HttpContext.Current.Request["name"];
                string age = HttpContext.Current.Request["age"];
                string name1 = HttpContext.Current.Request.Params["name"];
                string age1 = HttpContext.Current.Request.Params["age"];
                HttpFileCollection files = HttpContext.Current.Request.Files;
                foreach (string key in files.AllKeys)
                {
                    HttpPostedFile file1 = files[key];
                    if (string.IsNullOrEmpty(file1.FileName) == false)
                        file1.SaveAs(HttpContext.Current.Server.MapPath("~/App_Data/") + file1.FileName);
                }  
               return Ok("success2");  
            }




    展开全文
  • Web Api简单使用方法

    千次阅读 2018-04-07 14:54:41
    1. 简单介绍什么是Web ApiREST属于一种设计风格,REST 中的 POST(新增数据),GET(取得数据),PUT(更新数据),DELETE(删除数据)来进行数据库的增删改查,而如果开发人员的应用程式符合REST原则,则它的服务为...
  • WebApi后端的List前端如何发送?

    万次阅读 2016-06-06 14:26:49
    WebApi作为RESTful的风格已经广为流行,在后端有时我们需要传入List类型的参数,那这时前端要如何发送数据呢?按以往ajax的经验,我们可能会选择post的方式,以formdata或者json数据来提效,比如 $.post(url,{'...
  • 比如这样的一个api,java怎么获得数据 上传订单备注 简要描述: 用户上传订单备注 请求URL: app-admin-SetMessage 请求方式: get 参数: 参数名 必选 类型 说明 token 是 string 验证 id 是 string 订单id msg...
  • Mvc4中的WebApi的使用方式

    千次阅读 2017-05-10 16:20:35
    一:简单介绍什么是Web apiREST属于一种设计风格,REST 中的 POST(新增数据),GET(取得数据),PUT(更新数据),DELETE(删除数据)来进行数据库的增删改查,而如果开发人员的应用程式符合REST原则,则它的服务为...
  • c#后台如何接收 我需要获取这个控件选择的文件的路径 _前端_ ``` 上传 下载 ``` _js_ ``` $(document).ready(function () { $("#btnUpLoad").click(function () { $.ajax({ url: "Handler3.ashx...
  •  小编目前工作内容属于和第三方做接口对接,突然调换到开发产品组,需要做一个拍照上传身份证照片到后台识别的功能。一个很简单的功能,当我做到需要上传图片到后台的时候,突然感觉对上传文件的思路很乱,不知该...
  • webapi接收集合数据

    千次阅读 2018-04-26 14:51:32
    最近在做一个项目,前端(angularjs)需要传递批量数据webapi。开始想已Get方式提交,结果是单个对象(没问题,但是多个对象集合一起传递时,找不到api方法。 (单对象序列化后的JSON:"[{"REMARK":&...
  • 可同时参见这篇文章 asp.net webapi下json传值方式 纠缠了我几天的一个问题,简单摘抄整理下,希望对大家有帮助。 网络上大量使用json格式传递数据,json传递数据比较轻量,而用json传递数据就要解决两个问题: 1...
  • .NET Core WebAPI post参数传递时后端的接收方式 实体类 dynamic动态类型 JObject参数(推荐) 单值参数(字符串参数) A.前端Post请求代码 $.ajax({ url: "/api/student/poststudent", type: 'POST', data:JSON....
  • mvc4中的 webapi 的使用方式

    千次阅读 2015-07-19 19:12:04
    三:简单使用,直接从前台传递一个类到后台接收 四:其他获取值的方式   一:简单介绍什么是Web api REST属于一种设计风格,REST 中的 POST(新增数据),GET(取得数据),PUT(更新数据),DELETE(删除...
  • 微信小程序向Java后台传输参数

    万次阅读 2020-03-06 05:45:23
    想要向后台传输数据,需要在js中写 在微信小程序的官方文档中可以看到一个api叫wx.request它的作用是用来发送https请求的 在js代码中,我们先使用wx.request这个api,它需要我们去写url,这个url其实就是Java代码部署...
  • WebAPI请求

    千次阅读 2015-05-06 10:07:53
    于即将要接手的新项目计划用ASP.NET MVC3来开发,所以最近一段时间一直在看相关的书或文章。因为之前在大学里也曾学习过MVC2开发,也做过几个简单的MVC2的小型测试项目,不过在后来工作以后主要还是开发WebForm的...
  • 有时,我们需要调用外部Web系统API,获取返回数据,数据类型为JsonResult。 如调用微信公众号API推送功能,返回推送结果。 推送结果: { success = False, returnData = {"errcode":40003,"errmsg":"invalid openid...
  • 终于知道怎么在c#后台发post请求了

    万次阅读 2018-06-20 16:32:05
    C#进阶系列——WebApi 接口参数不再困惑:传参详解阅读目录一、get请求1、基础类型参数2、实体作为参数3、数组作为参数4、“怪异”的get请求二、post请求1、基础类型参数2、实体作为参数3、数组作为参数4、后台发送...
  • 现象:定义一个API接口规范,接口参数包含三个,两个string类型参数,一个自定义实体类型参数,C#控制台或Winform程序如何发送POST请求,访问API接口? 示例如下,含API接口规范: 下面看C#后台如何请求该API: 1...
1 2 3 4 5 ... 20
收藏数 34,041
精华内容 13,616
关键字:

webapi 后台接受的数据类型