webapi 设置返回的编码格式_webapi设置数据返回的格式 - CSDN
精华内容
参与话题
  • 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请求

    转载请注明出处。

    展开全文
  • 正/逆地理编码服务(又名Geocoding API)是一类Web API接口服务;正向地理编码服务提供将结构化地址数据(如:北京市海淀区上地十街十号)转换为对应坐标点(经纬度)功能;逆向地理编码服务提供将坐标点(经纬度)...

    正/逆地理编码服务(又名Geocoding API)是一类Web API接口服务;
    正向地理编码服务提供将结构化地址数据(如:北京市海淀区上地十街十号)转换为对应坐标点(经纬度)功能;
    逆向地理编码服务提供将坐标点(经纬度)转换为对应位置信息(如所在行政区划,周边地标点分布)功能。

    逆地理编码官方参考链接:http://api.map.baidu.com/geocoder/v2/?callback=renderReverse&location=39.934,116.329&output=json&pois=1&ak=您的ak             //GET请求

    参数:

    1. callback: 将json格式的返回值通过callback函数返回以实现jsonp功能,不需要jsonp格式的可不添加。
    2. location: 经纬度坐标,格式——纬度,经度。
    3. output: 输出格式,可为json或xml,默认xml。
    4. pois: 当值为1时,默认显示周边1000米内的poi; 0时不显示。
    5. ak: 用户申请百度开发者注册的key,自v2开始参数修改为“ak”,之前版本参数为“key” 申请ak

    返回示例:

    添加callback=renderReverse参数

    renderReverse&&renderReverse({"status":0,"result":{"location":{"lng":116.32899999999994,"lat":39.93400007551505},"formatted_address":"北京市海淀区增光路35-6号","business":"航天桥,甘家口,车公庄","addressComponent":{"country":"中国","country_code":0,"country_code_iso":"CHN","country_code_iso2":"CN","province":"北京市","city":"北京市","city_level":2,"district":"海淀区","town":"","adcode":"110108","street":"增光路","street_number":"35-6号","direction":"附近","distance":"13"},"pois":[],"roads":[],"poiRegions":[],"sematic_description":"中国建设银行(增光路支行)附近8米","cityCode":131}})

    不添加callback=renderReverse参数

    {"status":0,"result":{"location":{"lng":116.32899999999994,"lat":39.93400007551505},"formatted_address":"北京市海淀区增光路35-6号","business":"航天桥,甘家口,车公庄","addressComponent":{"country":"中国","country_code":0,"country_code_iso":"CHN","country_code_iso2":"CN","province":"北京市","city":"北京市","city_level":2,"district":"海淀区","town":"","adcode":"110108","street":"增光路","street_number":"35-6号","direction":"附近","distance":"13"},"pois":[],"roads":[],"poiRegions":[],"sematic_description":"中国建设银行(增光路支行)附近8米","cityCode":131}}

    • //设向接口链接发送请求返回结果为 findings,可将结果转成json格式
    • JSONObject parseObject = JSON.parseObject(findings);
    • //获取返回结果result结果集,继续转成json格式
    • JSONObject jsonObject = parseObject.getJSONObject("result");
    • //可通过key获取示例result中的重要属性
    • jsonObject.getString("formatted_address");
    • jsonObject.getString("business");
    • jsonObject.getString("sematic_description"));

    正地理编码类似,更简单,就不在此处详述了。

    更多详情可查看官方服务文档:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding

     

    展开全文
  • 如题,asp.net core 的webapi, url传中文参数到control里全是乱码咋整? web.config里设置不起作用呢
  • 官方文档:http://lbs.amap.com/api/webservice/guide/api/inputtips 地点详情接口: http://restapi.amap.com/v3/assistant/inputtips?output=xml&city=010&keywords=招商银行&key=<用户的key>使用说明第一步,申

    需求:提供高德地图搜索地点功能,并查出经纬度坐标。
    官方文档:http://lbs.amap.com/api/webservice/guide/api/inputtips
    地点详情接口:
    http://restapi.amap.com/v3/assistant/inputtips?output=xml&city=010&keywords=招商银行&key=<用户的key>

    使用说明

    第一步,申请”Web服务API接口”密钥(Key);
    第二步,拼接HTTP请求URL,第一步申请的Key需作为必填参数一同发送;
    第三步,接收HTTP请求返回的数据(JSON或XML格式),解析数据。
    如无特殊声明,接口的输入参数和输出数据编码全部统一为UTF-8。

    详情看官网接口文档。

    展开全文
  • 百度地图开放平台地理编码服务和逆地理编码服务的api文档地址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding  Geocoding API 是一类接口,用于提供从地址到经纬度坐标或者从...

       百度地图开放平台地理编码服务和逆地理编码服务的api文档地址:http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding

         Geocoding API 是一类接口,用于提供从地址到经纬度坐标或者从经纬度坐标到地址的转换服务,用户可以使用C# 、C++、Java等开发语言发送请求且接收JSON、XML的返回数据。

         Geocoding API 已全面支持HTTP/HTTPS两种请求形式。

    地理编码:即地址解析,由详细到街道的结构化地址得到百度经纬度信息,例如:“北京市海淀区中关村南大街27号”地址解析的结果是“lng:116.31985,lat:39.959836”。同时,地理编码也支持名胜古迹、标志性建筑名称直接解析返回百度经纬度,例如:“百度大厦”地址解析的结果是“lng:116.30815,lat:40.056885” ,通用的POI检索需求,建议使用Place API。

    逆地理编码:即逆地址解析,由百度经纬度信息得到结构化地址信息,例如:“lat:31.325152,lng:120.558957”逆地址解析的结果是“江苏省苏州市虎丘区塔园路318号”。

      以下是用来测试的PHP代码:

    <?php
    	header("Content-type:text/html;charset=utf-8");
    	// 百度地理编码服务
    	$ak="SlKGotyLwOjjBUR2ZGb7uKAlO59FqHVY";
    	$output="json";
    	$callback="showLocation";
    	$address="南宁市兴宁区朝阳广场";
    	$city="南宁市";
    	$url="http://api.map.baidu.com/geocoder/v2/?output=$output&address=$address&city=$city&ak=$ak";
    	$res=getData($url);
    	$res=json_decode($res,true);
    	echo "<pre>";
    	print_r($res);
    	if($res['status']==0){
    		// 经纬度
    		$lng=$res['result']['location']['lng'];
    		$lat=$res['result']['location']['lat'];
    	}else{
    		exit("百度地理编码服务出错,获取不到经纬度!");
    	}
    	
    
    	// 百度逆地理编码服务
    	$ak="SlKGotyLwOjjBUR2ZGb7uKAlO59FqHVY";
    	$location=$lat.",".$lng;
    	$output="json";
    	$url="http://api.map.baidu.com/geocoder/v2/?location=$location&output=$output&ak=$ak";
    	$data=getData($url);
    	$data=json_decode($data,true);
    	print_r($data);
    
    	/*
    	 * 用GET方式获取指定URL的数据
    	 */
    	function getData($url){
    		$ch = curl_init();
    		curl_setopt($ch, CURLOPT_URL, $url);
    		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    		curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    		$result = curl_exec($ch);
    		curl_close($ch);
    		return $result;
    	}
    ?>
    网页输出结果如下:
    
    Array
    (
        [status] => 0
        [result] => Array
            (
                [location] => Array
                    (
                        [lng] => 108.32766625111
                        [lat] => 22.825109768923
                    )
    
                [precise] => 1
                [confidence] => 80
                [level] => UNKNOWN
            )
    
    )
    
    Array
    (
        [status] => 0
        [result] => Array
            (
                [location] => Array
                    (
                        [lng] => 108.32766625111
                        [lat] => 22.825109774287
                    )
    
                [formatted_address] => 广西壮族自治区南宁市兴宁区人民东路236号
                [business] => 朝阳,区工商局,龙腾路
                [addressComponent] => Array
                    (
                        [country] => 中国
                        [country_code] => 0
                        [province] => 广西壮族自治区
                        [city] => 南宁市
                        [district] => 兴宁区
                        [adcode] => 450102
                        [street] => 人民东路
                        [street_number] => 236号
                        [direction] => 东
                        [distance] => 75
                    )
    
                [pois] => Array
                    (
                    )
    
                [poiRegions] => Array
                    (
                        [0] => Array
                            (
                                [direction_desc] => 内
                                [name] => 朝阳广场
                                [tag] => 休闲娱乐
                            )
    
                    )
    
                [sematic_description] => 朝阳广场内
                [cityCode] => 261
            )
    
    )
    
    

     
    
    


    展开全文
  • 请求rest接口返回中文乱码

    万次阅读 2018-01-07 10:17:25
    我利用ajax请求后台的rest接口,当然我在web.xml中编写了对应的过滤设置,但是也仅仅能够保证我传递到后台的数据是乱码的 CharacterEncodingFilter org.springframework.web.filter....
  • 使用第三方提供的swgger ui 可有效提高 web api 接口列表的阅读性,并且可以在页面中测试服务接口。 但本人在查阅大量资料并进行编码测试后,发现大部分的swagger实例并不能有效运行。原来是由版本的差异导致的...
  • 通过.NET客户端调用Web API(C#)

    万次阅读 2020-05-29 14:59:37
    3.2 Calling a Web API From a .NET Client (C#) 3.2 通过.NET客户端调用Web API(C#) 本文引自:http://www.asp.net/web-api/overview/web-api-clients/calling-a-web-api-from-a-net-client By Mike Wasson | ...
  • RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。而随着RESTful API的成熟和流行,应用开发方面就需要以模拟http请求的方式来调用RESTful API接口;经过一段时间的IBM的云平台Blumemix的学习及语言...
  • ASP.NET WEBAPI实现微信接入验证

    万次阅读 2019-11-19 19:12:38
    ASP.NET WEBAPI实现微信接入验证首先你需要一个微信公众号,很重要的是你需要完成认证,这点非常重要,如果不认证优先功能无法实现。 当你完成公众号的基本设定后,我们需要为开发做第一件事情:基本配置。下面我...
  • HttpServletResponse简介

    万次阅读 多人点赞 2011-12-06 18:03:26
    HttpServletResponse简介 1、 WEB服务器回送给WEB客户端的HTTP响应...2、 Servlet API中定义的ServletResponse接口类用于创建响应消息。 3、 HttpServletResponse是专用于HTTP协议的ServletResponse子接口,它
  • webapi token、参数签名是如何生成的

    万次阅读 2019-08-09 14:43:43
    API接口保障安全性原则:1.有调用者身份2.请求的唯一性3.请求的参数不能被篡改4.请求的有效时间 在刚接触接口开发时,可能脑子里压根就没有这个接口调用安全性的原则,但常识性的经验告诉我们,每一个请求都应该...
  • PHP中的json_encode方法,在5.4之前版本,中文会被unicode编码;5.4加入JSON_UNESCAPED_UNICODE,这个参数,设置不进行escape和unicode处理。
  • java web api接口调用

    万次阅读 2017-08-17 13:27:27
    Web Services 被W3C进行了标准化定义。 Web Services 发布到网上,可以公布到某个全局注册表,自动提供服务URL,服务描述、接口调用要求、参数说明以及返回值说明。比如中国气象局可以发布天气预报服务。所有其它...
  • 前段时间有师兄希望帮忙做一个类似于地理编码之类的东西,就是在表格里输入经纬度以后可以通过程序实现地理位置的批量输出,自己写了半天也没写出来, 在当时实习的项目经理(于老师)的指导下我才明白什么意思,...
  • 现有的关于百度地图API使用的资料大部分都是基于Python2的,而本文则实现了在Python3中使用百度地图API完成地点信息转换。 百度地图开发平台提供了各式各样的API可供开发者调用,而本文则涉及到了其中的Place API和...
  • 本方法最大的优势是轻量级,不需要在所开发的应用中集成任何SDK开发工具包,也不需要在测试机中添加任何识别引擎软件,开发者只要了解Http网络请求以及百度语音识别 REST API的使用规则,即可轻轻松松在自己的应用中...
  • 上篇关于爬虫的文章,我们讲解了如何运用Python的requests及BeautifuiSoup模块来完成...1、设置请求参数(url,headers,cookies,post或get验证等)访问目标站点的服务器; 2、解析服务器返回的文档,提取需要的信息。
  • 本文章通过讲解如何在百度地图API申请密钥,然后在python中调用API接口将自有数据中的地名转换为经纬度坐标。 运行环境: python3 一、注册密钥 在百度地图API上相关位置的展现是以经纬度为基础的。要使用百度...
1 2 3 4 5 ... 20
收藏数 106,960
精华内容 42,784
关键字:

webapi 设置返回的编码格式