webapi字符串过长找不到接口_webapi接受长字符串 - CSDN
精华内容
参与话题
  • webapi请求参数长度大解决方法

    千次阅读 2018-02-11 14:57:07
    【.net framework】【.net core】 ///配置文件大小限制 services.Configure<FormOptions>(options => { options.MultipartBodyLengthLimit = 60000000; ...

    【.net framework】


    【.net core】

                ///配置文件大小限制
                services.Configure<FormOptions>(options =>
                {
                    options.MultipartBodyLengthLimit = 60000000;
                });
            [HttpPost]
            [DisableRequestSizeLimit]
            public void uploadFile([FromBody] string base64)
            {
            }


    展开全文
  • WebAPI接口调试技巧

    千次阅读 2020-06-22 13:20:23
    1.了解WebAPI接口 接口模式:基于MVC4.0的WebAPI 承载协议:HTTP 跟踪工具:IE11 请求方式:POST 请求URL:IP:Port/Application/Controller/ActionName/Parameters 请求参数:一串由JSON对象转化而成的字符串 响应...

    1.了解WebAPI接口

    • 接口模式:基于MVC4.0的WebAPI
    • 承载协议:HTTP
    • 跟踪工具:IE11
    • 请求方式:POST
    • 请求URL:IP:Port/Application/Controller/ActionName/Parameters
    • 请求参数:一串由JSON对象转化而成的字符串
    • 响应状态:200(OK)
    • 响应结果: 一串JSON格式的数据
    • 响应类型:application/json

    2.WebAPI接口的URL规则

    • URL规则:IP:Port/Application/Controller/ActionName/Parameters
    • 示例:192.168.202.53/wszwdtapi_v6.6/taskkind/gettaskkindsbycodename
      IP:192.168.202.53,Port:80(默认)
      ApplicationName:wszwdtapi_v6.6
      Controller:taskkind
      ActionName:gettaskkindsbycodename
      Parameters:无

    3.HTTP请求模式

    • 两种最常用见的HTTP 请求方法:
      GET 和 POST
    • 标准版的利用方案:
      统一使用POST方式,为接口后台提供统一的参数处理规则。
    • 接口限制:接口会限制HTTP请求模式,如果限制了POST方式,则GET时会报404错误。
      | GET | POST |
      | ------------- |-------------|
      | 从指定的资源请求数据| 向指定的资源提交要被处理的数据 |
      | 参数必须以键值对的形式包含在URL中 | 建议参数以JSON字符串存放在请求体中 |
      | 请求体为空 | 利用请求体传数据 |

    4.HTTP状态消息

    • 常见的状态
      | 常见状态 | 注释 |
      | ------------- |-------------|
      | 200 OK | 请求成功 |
      | 304 Not Modified | 未按预期修改文档。 |
      | 403 Forbidden | 对被请求页面的访问被禁止。|
      | 404 Not Found | 服务器无法找到被请求的页面。|
      | 500 Internal Server Error | 请求未完成。服务器遇到不可预知的情况。|
      | 501 Not Implemented | 请求未完成。服务器不支持所请求的功能。|
      | 503 Service Unavailable | 请求未完成。服务器临时过载或当机。 |
      ####更多状态请点击这里

    5.常见的HTTP协议跟踪工具

    • IE/Chrome/FireFox等浏览器开发人员工具-网络工具
      (注:IE推荐使用10+,Chrome调试界面为英文)
    • Fildder(http://www.telerik.com/fiddler)
      Fildder基础原理
    • PostMan(Chrome插件) (https://www.getpostman.com/)

    6.科学的剖析接口调用情况

    • 当访问接口不成功,且初步排查没发现问题时,就应该先从HTTP请求入手,而不是耗费太多时间纠结在代码上。
    1. 打开调试工具,重复请求过程(刷新页面或重新点击提交按钮)
    2. 通过调试工具,查看是否存在对应的请求
    3. 如果不存在请求,现判断调用代码是否出现异常,有没有发出请求?
    4. 请求存在,判断请求状态码,顺藤摸瓜的分析原因。
      例如最常见错误,假如HTTP状态码为404,就可以通过判断IP、端口号,请求方式、URL字符串来确定是否是代码问题还是部署问题。
    5. 请求后得到状态码为200,那么再仔细研究下接口的传入数据和传出数据。
      ###7.使用Fiddler工具分析传入数据与返回数据
      ####使用Fiddler工具
    6. 打开Fiddler
    7. 利用浏览器访问对应的页面
    8. 在Fiddler左侧请求列表中,找对刚才的页面
    9. 点击选中,在Fiddler右侧查看详细数据。请求正文

    响应正文

    这里写图片描述
    ####利用Fiddler右侧Composer模拟请求

    1. 选择请求方式Get或者Post
    2. 输入URL
    3. 如果有参数,在Request Body中输入
    4. 点击Excute,发送请求
    5. 在右侧Log Requests中选择刚执行的请求
      Composer模拟请求

    8.常见问题的解决

    ####跨域问题

    • 当我们跟踪到带有关键字“Access-Control-Allow-Origin ”的错误时,说明我们遇到了跨域问题!如图:
      错误示例
      跨域问题的根本来自于浏览器的一个安全策略:同源策略
      所谓“同源”指的是“三个相同”:协议相同、域名相同、端口相同(IE浏览器下只需要满足协议及域名相同)
      如果非同源,共有三种行为受到限制。
    1. Cookie、LocalStorage 和 IndexDB 无法读取。
    2. DOM 无法获得。
    3. AJAX 请求不能发送。
    • 目前有三种方法规避这个限制。1.JSONP,2.WebSocket,3.CORS
      标准版统一采用CORS方式来规避同源策略。
    1. .Net中,在需要访问的接口的返回头中,加入“源信息”
      代码如下:HttpContext.Response.AppendHeader(“Access-Control-Allow-Origin”, “*”);
      或者在WebConfig中,为每个返回头加入“源信息”
    <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" /></customHeaders>
    

    ####常见的403错误

    • .Net模式的WebAPI的403错误,是一个典型的Web应用程序问题。
    • 现象:IP、端口完全正常,同台服务器部署的其他Web程序能正常访问,本接口在其他服务器上也能正常开放!根据状态码提示:该接口的应用程序本身存在问题。
      错误详情
    • 一般经验:.Net的WebAPI接口,是基于.Net的MVC框架,老版本IIS未必支持MVC机制,导致HTTP请求无法成功识别。一般情况将程序进程配置为集成模式即可。也有可能是因为未将.Net Framework4.0注册进IIS导致,通过命令注册即可。
    • 具体参考:http://blog.csdn.net/lingxyd_0/article/details/43154867
    • Unable To connect the Romote Server(无法连接到远程服务器)
    • 问题:Unable To connect the Romote Server(无法连接到远程服务器)
    • 分析:这两个问题,仍是接口不能访问导致的。问题表现形式较以往很大不同,是因为访问接口的不是JS代码,而是后台代码。
    • 结论:检查配置的接口地址是否正确,或者接口服务器是否开启。
    展开全文
  • webapi token、参数签名是如何生成的

    万次阅读 2019-08-09 14:43:43
    API接口保障安全性原则:1.有调用者身份2.请求的唯一性3.请求的参数能被篡改4.请求的有效时间 在刚接触接口开发时,可能脑子里压根就没有这个接口调用安全性的原则,但常识性的经验告诉我们,每一个请求都应该...

     

    API接口保障安全性原则:1.有调用者身份2.请求的唯一性3.请求的参数不能被篡改4.请求的有效时间

     

    在刚接触接口开发时,可能脑子里压根就没有这个接口调用安全性的原则,但常识性的经验告诉我们,每一个请求都应该有原则地保障安全性。

    例如这个接口  http://127.0.0.1/api/user/list?type=value 这个获取用户列表信息的请求总不能在地址栏一输入就直接显示信息(虽然有点夸张,不至于阿猫阿狗的信息这么容易get吧),在写webapi接口原则性的基本要求必须得保证数据的安全性和请求的有效性

    在这里我就使用Token+参数签名+时间戳  这三个系统参数来办证请求的有效性(即时100%请求有效,也不能说100%也安全了)。

     

    参数名 必选 类型 作用
    token string 调用方标识,保障其身份是来自本系统认证过的,有效识别用户身份
    sign 否    string 接口参数的key,value的记录,防止参数值被篡改,防止伪装请求
    timestamp f否 int 时间戳,防止重放攻击

     

    那么问题来

     

    1.token 如何生成?作用是什么?

    2.参数签名如何生成?作用是什么?

    3.时间戳的作用是什么?

    看了这篇文章你就知道了。这三个系统参数是如何保证请求的有效性,一定程度上提高数据的安全性

    1.token如何生成的?作用是什么?

    token生成:一般的api基本上主要分为两种客户端访问api的token和需要用户登录之后的token,这里我就来说一下后者,(简单通俗做法)用户登录输入用户名、密码,访问api,验证数据库成功。这个时候可以产生token,失败直接返回。问题又来了!

    1.token生成的方式是什么?2.token存在哪里?3.token如何验证是否正确

    在验证数据成功之后可以获取唯一用户标识(用户名也行),就以username:zhanglin为例吧,对这个标识进行加密(des,MD5、其他的也行,关键数据必须得加密),这个加密之后的字符串就可以做为一个Token了。

    2.token每次请求都需要进行传递,推荐存在cookie,也可以持久化到客户端。现在有这样一个api接口http://127.0.0.1/api/user/list?token=encryptUsernameStr

    这个encryptZhanglinStr就是登录成功后加密的username返回的给客户端,客户端用什么保存这里就不多介绍了,只需要知道返回给客户端一个用户访问的Token类即可,到了服务器端方法验证的时候再进行解密,获取到字符串zhanglin,然后将这个zhanglin与系统用户(可采用缓存数据库、缓存token的值)对比,如果对比存在,则说明有权限去访问api,反之非法的请求。

    还是代码来实现一下吧。代码比较容易理解,就是为了把这个原理说清楚一点

            [Route("login")]
            public bool login(string account, string pwd)
            {
                var obj = Db.dbUsers.FirstOrDefault(f => f.Account == account && f.Pwd == pwd);
                if (obj != null)
                {
                    string token = account.DESEncrypt(desKey);//加密产生token,
                    HttpCookie cookie = new HttpCookie(cookieToken,token);
                    HttpContext.Current.Response.Cookies.Add(cookie);//保存cookie
                    return true;
                }
                else
                {
                    return false;
                }
            }

    token的产生就是登陆之后根据用户标识保存在cookie里,这样在客户端每次发送请求的时候都会带上token这个参数,如下:

            [Route("list"), HttpGet]
            public List<string> List(string  type,string token)
            {
                var obj = Db.dbUsers.FirstOrDefault(p => p.Account == token.DESDecrypt(desKey));
                //验证token
                if (obj != null)
                {
                    //返回数据集
                }
                else
                {
                    //非法请求
                }
            }

     

    3.这样就可以验证token是否正确,一般都是用缓存。

    Token的作用的就是判断请求是否是系统用户发出的,这样能有效识别请求用户的身份信息

    2..参数签名如何生成?作用是什么?

    参数签名sign:为了提高传参过程中,防止参数被恶意修改,在请求接口的时候加上sign可以有效防止参数被篡改,那么sign是如何起作用的呢?

    看看它的生成方法就明白了

     

    比如有这样一个接口http:127.0.0.1/api/product?&type=zl&p1=value1&p2=value2&p3=&sign=signValue

    第一步:拼接参数字符串,除去sign参数本身和为空值的p3,那么剩下的就是字符串type=zl&p1=value1&p2=value2,然后按参数名字符升(降)序,得到字符串

    p1=value1&p2=value2&type=zl

    第二步:然后做参数名和值的拼接,得到字符串p1value1p2value2type=zl,注意编码,不能出现这种&quot; ,要转码后“后拼接

    第三步:将字符串进行DES加密,假设p1value1p2value2type=zl进行des加密后的结果是abc123,最终得到的字符串abc123就是参数sign的值signValue

    第四步:在接口中我们会接收到参数名sign的参数值abc123,然后解密得到字符串p1value1p2value2type=zl,再与接口中参数拼接排序后进行比较,如果不一样则说明参数的循序不一样,参数的值就一定是被修改过了。

    总结:

    1.接口的调用方和接口的提供方统一约定参数加密算法

    2.参数签名就是对参数key ,value的一个记录。参数如果被修改肯定对不上参数签名,就不会调用请求

     

    3.时间戳的作用?

    在api请求的接口,客户端请求的发生时间便是时间戳,这个参数到了服务器,与服务器端时间对比,如果时间间隔较长则无效。

    在asp.net mvc的开发webapi接口时,可以使用mvc的过滤器进行以上三个关键参数的拦截过滤。以下代码是在.net core中实现的,方法还是一样的,都是在进入方法前进行拦截,这是一个登录的api。

    返回api结果是一个类ApiResult.cs,序列化成json对象,该类包含两个泛型方法请求成功的Ok方法,请求失败的Error方法

    public class MyFilterAttribute : Microsoft.AspNetCore.Mvc.Filters.ActionFilterAttribute
        {
            public override void OnActionExecuting(ActionExecutingContext context)
            {
                var request_param = context.ActionArguments.Values;
                var  queryCollection = context.HttpContext.Request.Query;
                string account = string.Empty;
                string password = string.Empty;
                long timespan = 0;
                string signature = string.Empty;
                try
                {
                    account = queryCollection.Where(p => p.Key == "account").Select(f => f.Value).FirstOrDefault().ToString();
                    password = queryCollection.Where(p => p.Key == "password").Select(f => f.Value).FirstOrDefault().ToString();
                    timespan = long.Parse(queryCollection.Where(p => p.Key == "timespan").Select(f => f.Value).FirstOrDefault().ToString());
                    signature = queryCollection.Where(p => p.Key == "signature").Select(f => f.Value).FirstOrDefault().ToString();
                }
                catch (Exception ex)
                {
                    var apiresult = ApiResult<bool>.Error("参数异常"+ex.ToString());
                    context.Result = new JsonResult(apiresult);
                }
                //var accountName = context.RouteData.Values["accountName"].ToString()
                var expires_minute = (timespan - DateTime.Now.Ticks) / 60000000000;
                if (expires_minute> 10||expires_minute<-10)
                {
                    var apimodel = ApiResult<bool>.Error("请求超时"+expires_minute);
                    //var json = JsonConvert.SerializeObject(apimodel);
                    JsonResult ret = new JsonResult(apimodel);
                    context.Result =ret;
                }
                var ok = ("account" + account + "password" + password).Contains(signature);//ToDO 加密解密
                if (ok == false)
                {
                    var apimodel = ApiResult<bool>.Error("非法请求");
                    var json = JsonConvert.SerializeObject(apimodel);
                    JsonResult ret = new JsonResult(apimodel);
                    context.Result = ret;
                }
                base.OnActionExecuting(context);
            }
    
        }


    作者:张林
    原文标题: webapi token、参数签名是如何生成的
    原文链接:http://blog.csdn.net/kebi007/article/details/72861532
    转载随意注明出处

     有兴趣的可以关注一下我的微信公众号[dotNet全栈开发],分享一些编程相关的经典文章

     

    展开全文
  • JSON和API接口初识

    万次阅读 2018-07-19 13:51:18
    首先认识一下JSON ... JSON是一种数据格式,是一种在互联网传输中运用最多的数据...例如我们完成了一个项目,该项目部署在web端和Android端,由于我们要使两者数据互通,这时我们就可以采用json传输数据,例如我们在An...

    首先认识一下JSON

    JSON官网:http://www.json.org/json-zh.html

    JSON是一种数据格式,是一种在互联网传输中运用最多的数据交换语言,由于它轻便、灵巧,且能从各种语言中完全独立出来,所以成为目前最理想的数据交换语言。

    例如我们完成了一个项目,该项目部署在web端和Android端,由于我们要使两者数据互通,这时我们就可以采用json传输数据,例如我们在Android端添加数据,同时我们想使web同步,利用JSON可以直接将数据提交给web,然后使用后端语言进行处理即可。

    JSON语言采用key/value型数据格式

    key:value相信大家都不陌生,JSON亦是如此。JSON所有的内容都由key/value实现

    key是一个字符串关键字,用来唯一标识一个属性,例如"name","address","time"等等。

    value是关键字的值,它可以由以下几种数据构成

    1. String:字符串
    2. number:数字
    3. object:对象(key:value)
    4. array:数组
    5. true:√
    6. false:×
    7. null:空

    结构之间可以相互嵌套,比如:

    {
        "data": [{
                "name": "qs395517243"
            },
            {
                "age": 20
            },
            {
                "hobby": [{
                    "first": "study"
                }, {
                    "second": "play"
                }, {
                    "third": "sport"
                }]
            },
            {
                "language": ["C", "java", "Python"]
            },
            "just a test"
        ]
    }

    整体是一个object——key为"data",value为数组array(length==5)

    • 最外层数组的第1块内容为object,key为"name",value为字符串String:"qs395517243"
    • 最外层数组的第2块内容为object,key为"age",value为数值number:20
    • 最外层数组的第3块内容为object,key为"hobby",value为数组array(length==3)
      • hobby层数组的第1块内容为object,key为"first",值为字符串String:"study"
      • hobby层数组的第2块内容为object,key为"second",值为字符串String:"play"
      • hobby层数组的第3块内容为object,key为"third",值为字符串String:"sport"
    • 最外层数组的第4块内容为object,key为"language",value为数组array(length==3)
      • language层数组的第1块内容为字符串String:"C"
      • language层数组的第2块内容为字符串String:"java"
      • language层数组的第3块内容为字符串String:"Python"
    • 最外层数组的第5块内容为字符串String:"just a test"

    可以看到嵌套的效果

    什么是API

    API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用开发与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。

    ————来自百度百科

           简而言之,就是各大厂商或个人将其封装好的函数/功能的接口提供给我们,我们通过直接调用其接口就可以完成相应的功能,而不用了解其中的内部逻辑。那么API接口和JSON又有什么关系呢。我们举个栗子:

    这是某一个API获取到的JSON数据,也就是说,我们通过API获取到的仅仅是一个JSON数据对象,我们需要进行解析才可以拿出我们需要的信息,比如上面这张图片,我们模拟输入的数据是"nba"(rw=nba)得到了上面的JSON数据,其中的内容我们可以根据英文明白相应的内容,而我们抓取其中的信息之后,通过后端处理和前端展示,得到了下面这样一个大致效果:

    左边是imageUrls中的(第一张)图片,右边从上到下从左到右分别是title,posterScreenName,publishDateStr,我们通过相关方法获取到JSON中的相关数据并且把它们展示出来。

    至于相关的实现代码和抓取JSON的代码,我们下次再详细剖析。

    API大全:

    分享:百度分享、JiaThis

    评论:畅言、友言

    支付:JiaSale、蚂蚁金服、微信支付、银联、第四方支付

    地图:高德开发平台、百度地图开发平台

    第三方登录:QQ登陆、微信登陆、微博登陆、淘宝

    识别技术:百度AI、科大讯飞

    娱乐:网易云音乐api

    快递:快递100

    短信:阿里大鱼

    天气:2345天气预报、聚合数据

    新闻:聚合数据

    短视频:七牛云

    翻译:有道智云

    广告:阿里妈妈、百度网盟、京东联盟、广告联盟

    统计:百度统计、CNZZ(友盟)、51啦

    在线客服:53kf、51客服、百度商桥

    综合API平台:聚合数据、APIStore、iDataAPI

    数据采集:火车头采集器

    快速开发APP:应用公园、叮当APP、APICloud、起步软件

    社交平台搭建:轻媒

    展开全文
  • string str="{\"msgType\":1001,\"msgstring\":\"信息\"}";//这里是你的json带有反斜杠的 HttpResponseMessage result = new HttpResponseMessage { Content = new StringContent(str, Encoding.GetEncoding("UTF-8...
  • Web API数据传输加密

    万次阅读 2015-08-18 12:03:12
    1、Web API接口访问分类 Web API接口的访问方式,大概可以分为几类: 1)一个是使用用户令牌,通过Web API接口进行数据访问。这种方式,可以有效识别用户的身份,为用户接口返回用户相关的数据,如包括用户...
  • c# webapi POST 参数解决方法

    万次阅读 2015-10-21 14:57:24
    c# webapi POST 参数解决方法:简单类型 复杂类型
  • 用户登录及API接口设计

    万次阅读 2018-12-11 14:06:40
    comments ...1、如果是web分离开发秘钥可以采用非对称加密; 2、安全性上面采用https(Ps:在安全性要求不是非常严格的情况下,不用TLS的“安全”,都是掩耳盗铃) ------------------------------...
  • 使用Web Speech API实现语音文本互转

    万次阅读 热门讨论 2017-09-25 12:55:11
    本教程中,我们将尝试使用Web Speech API,这是一个非常强大的浏览器接口,可以用来记录语音并将其转换为文本,同样的,也可以用来朗读字符串。 接下来进入正题,这个App应当具有以下几个功能: 通过语音录入或者...
  • Postman webapi接口测试(二)

    千次阅读 2018-06-26 13:09:55
    上一篇文章我们了解了WebAPI的搭建以及方法的调用传参,本篇文章主要教大家如何进行接口调试。1.首先下载postman安装包,下载地址:(在我的资源里 暂时没有审核通过 通过了改链接 要是一直通过你们就官网去下一...
  • c# WebApi接口返回类型详解

    万次阅读 2017-11-27 14:52:31
    WebApi相关文章: C# 搭建一个简单的Web API项目 C# WebApi 路由配置 c# WebApi之解决跨域问题:Cors c# WebApi之身份验证:Basic基础认证 c# WebApi接口返回类型详解 Webapi接口返回值主要有四种类型 void无...
  • .NET WebAPI post参数传递

    万次阅读 2018-08-30 09:52:38
    这里所说的键值对并非是一般的键值对,是指键为空,值为空的键值对 前台请求 $.ajax({ url: host + '/api/Source/TestParams', type:"post", data: { '': "Amon"}, ...
  • 接收前端Post来的Json对象,一直转换为空,就是Json对象无法成功转换成当前对象 检查我们的模型类数据类型,...如果前端给我们的float类型传了一个空字符串,将转换报错,所以导致我们的接口接收对象一直为Null ...
  • 近日正在看Asp.net,看到Web.config有很清楚之...在ASP.NET的web.config中,可以用两种方式来写连接字符串的配置。 configuration> appSettings> add key="connstr1" value="Data Source=.;Initial Catalog=DB
  • 了好多天都没找到小程序批量上传图片的方法,然后我现在的逻辑是: 取上传图片的集合,循环调用小程序wx.UploadFile方法,依次上传 后端取文件之后生成唯一MD5码(相同的文件生成的MD5码是唯一的),然后取...
  • ASP.NET WEBAPI实现微信接入验证

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

    千次阅读 2010-01-06 09:55:00
    JAX-WS 注释“基于 XML 的 Web Service 的 Java API”(JAX-WS)通过使用注释来指定与 Web Service实现相关联的元数据以及简化 Web Service 的开发。注释描述如何将服务器端的服务实现作为 Web Service 来访问或者...
  • 今天在做ajax调用webapi接口的时候,用的是fidder调试的。能看到返回的数据是xml,类似于json格式,用alert(data),始终都是object类型的。但是在读取值的时候,始终不知道该如何取值,试了N种方式取值还是取不到。...
  • 1、参考网上资料和书本资料,实现了API接口签名生成算法和签名验证算法。 (1)参考资料:https://www.jianshu.com/p/d47da77b6419 (2)参考书籍:高级软件架构师教程(311-312)   2、API接口签名生成算法 ...
  • HttpServletResponse简介

    万次阅读 多人点赞 2011-12-06 18:03:26
    HttpServletResponse简介 1、 WEB服务器回送给WEB客户端的HTTP响应...2、 Servlet API中定义的ServletResponse接口类用于创建响应消息。 3、 HttpServletResponse是专用于HTTP协议的ServletResponse子接口,它
1 2 3 4 5 ... 20
收藏数 114,055
精华内容 45,622
关键字:

webapi字符串过长找不到接口