使用 HTTP 协议上传文件的标准做法是:使用
multipart/form-data
。但有时为了实现简单且要上传的文件不会太大,仍然会采用
application/x-www-form-urlencoded
上传文件,这就需要在上传前对二进制文件进行编码,比如使用 Base64 。
public async Task<IActionResult> SubmitImage(int id, [FromForm(Name = "image")] string image)
if (string.IsNullOrWhiteSpace(image)) throw new UserFriendlyException("图片不能为空");
var data = Convert.FromBase64String(image);
//TODO:处理图片
以上代码一直工作良好,很久以后接到客户反馈有几张图片一直上传失败,明明选择了图片却还是提示“图片不能为空”。这说明 image 参数没有被正确绑定上。图片的大小为 6MB 左右,这很显然没有突破 IIS 的限制(默认为 30MB),也没有突破 ASP.NET Ccor 对单个请求大小的限制(默认为 30MB)。我特意去查看了 Windows 日志,也没有看到报错信息。
模拟用户的请求,确实在 HTTP 抓包中看到了图片,但是调试器中 image 确实为空。几番搜索下来,我找到了一个名为 FormOptions
的配置类:
https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.aspnetcore.http.features.formoptions?view=aspnetcore-6.0
其中的 ValueLengthLimit
属性有如下定义:
A limit on the length of individual form values. Forms containing values that exceed this limit will throw an InvalidDataException when parsed. Defaults to 4,194,304 bytes, which is approximately 4MB.
也就是说:默认情况下,ASP.NET Core 限制了每个 POST 数据值的长度为 4 MB 大小,超过就会抛出 InvalidDataException
异常。我很可能是遇到了这个限制,但因为并没有抛异常所以不太敢确定。
services.Configure<FormOptions>(options=>{
options.ValueLengthLimit = 209715200;//200MB
以上代码将限制提升到了 200MB,经测试问题解决。
使用 Base64 将文件编码后虽然会简化,但同时会导致网络传输内容增大,或者遇到本文所示的异常(默认情况下,multipart/form-data
对单个上传项的限制是 128MB)。如果你使用的是 MVC,也可以直接使用 RequestFormLimitsAttribute
解决该问题:
https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.aspnetcore.mvc.requestformlimitsattribute?view=aspnetcore-6.0
使用 HTTP 协议上传文件的标准做法是:使用multipart/form-data。但有时为了实现简单且要上传的文件不会太大,仍然会采用application/x-www-form-urlencoded上传文件,这就需要在上传前对二进制文件进行编码,比如使用 Base64 。public async Task<IActionResult> Submi...
1.Get请求携带数据量的各种限制及解决办法
Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。
到新公司处理的第一个线上问题是某个商品页,在某个人机器上访问失败,nginx返回400错误,但其它人机器上没有问题,即使用虚拟机重建了出问题机器的软硬件环境也不会出问题。
经过对出问题机器的http请求进...
前日,看到这个问题了。 没有深入了解。我的常识里面get最大传递的值为256b,post 是2M。这是很久以前不知在哪看到的。于是又百度一下。看到两篇文章装过来看看:
浅谈 HTTP中Get与Post的区别GET方式传值的最大长度都有些道理。引用其中一些观点:
get 首先是"GET方式提交的数据最多只能是1024字节",因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度...
1、PadLeft和PadRight使用说明
两个方法都是对字符串格式化进行补齐填充,PadLeft是左边,而PadRight是右边
'1010'.PadLeft(10,'0') // 结果:0000001010
'1010'.PadRight(10,'0') // 结果:1010000000
2、padStart和padEnd使用说明
'1010'.padSt...
GET请求
长度限制
理论上GET请求
数据长度没有
限制的,真正起到
限制的是浏览器对其
长度进行了
限制。
为兼容各个浏览器的请求
长度,可以总结为:URL
长度限制为2083个字符。
下面是各个浏览器对字符
长度的具体
限制:
Microsoft Internet Explorer (Browser)
IE浏览器对URL的最大
限制为2083个字符,如果超过这个数字,提交按钮没有任何反应。
Firefox (Browser)
对于Firefox浏览器URL的
长度限制为65,536个字符。
Safari (Browser)
1、IIS下取消POST大小的限制(限制默认POST的长度是4096 Byte)
在web.config文件中的system.web配置节增加下面语句。(IIS默认长度为30兆,web.config中maxRequestLength设置超过30兆同样上传不成功)
<httpRuntime targetFramework="4.5.1" requestValidationMod...
action的参数列表中有[fromform]并且是list进行接收
数据的,在list的条数超出一定的数量
时,ui端调用接口的
时候可能会抛出500错误,查看console的消息却显示是跨域,但经过分析后很明显不是跨域问题。几番思量,仍认为是
数据超长的问题。
我选择的
解决方案是在startup.cs内的ConfigureServices方法内添加一段对接收
数据的最大容量
限制,
services.Configure<FormOptions>(options =>
ASP.NET Core中如何更改文件上传大小限制maxAllowedContentLength属性值
Web.config中的maxAllowedContentLength这个属性可以用来设置Http的Post类型请求可以提交的最大数据量,超过这个数据量的Http请求ASP.NET Core会拒绝并报错,由于ASP.NET Core的项目文件中取消了Web.config文件,所以我们无法直接在visual studio的解决方案目录中再来设置maxAllowedContentLength的属性值。
首先说下 C#语言实现http post协议传参 调用其他接口失败
在网上查找好多资料 解决办法有:
1.wbe.config 设置httpruntime中Requestlegth最大
2.IIS设置
3.改变ContentType类型
尝试后 还是失败
最终自己写了个接口 传相同的参数
调试发现json传过来的参数 是urlencode的 页面中req...
是通过URL提交
数据,因此GET可提交的
数据量就跟URL所能达到的最大
长度有直接关系。URL不存在参数上限的问题,HTTP协议规范也没有对URL
长度进行
限制。这个
限制是特定的浏览器及服务器对它的
限制。IE对URL
长度的
限制
是2083字节(2K+35字节)。对于其他浏览器,如FireFox,Netscape等,则没有
长度限制,这个
时候其
限制取决于服务器的操作系统。即
如果url太长,服务
使用axios的data后台: [HttpPost]
public string Login([FromBody] dynamic data)//(string username,string password)
var aa= Request.ContentLength; ;