6.2K Star 11.9K Fork 4K

GVPdotNET China / Furion

 / 详情

远程请求(第二次使用远程请求遇到问题,这次不确定是框架问题,还是我不会使用)

已完成
创建于  
2022-12-29 18:12

输入图片说明

💢 特别说明:如果 Issue 没有严格按照模板编写且未提供测试源码下载或 Git 测试仓库地址,则视为无效 Issue,将无法得到答复。

Furion 版本号

哪个版本号?
4.8.3.7

.NET SDK 版本号

  • .NET5
  • .NET6
  • .NET7

项目类型

  • [√ ] WebApi
  • Mvc
  • Razor Pages
  • Blazor Server
  • MinApp
  • WinForm
  • WPF
  • Console

操作系统和版本

  • [ √] Windows(版本号?)
  • Linux(版本号?)
  • MacOS(版本号?)
  • 其他(版本号?)

代码环境

  • 开发环境(Development)
  • 生产环境(Production)
  • [ √] 测试环境(Tests/单元测试/集成测试 )

描述你的问题

发生了什么?
远程请求发送Content-Type 设置为 application/x-www-form-urlencoded,框架会自动进行UrlEncode 编码处理。
对方想要gbk格式的数据

输入图片说明
下面是我想要是实现的效果,上面是框架自动编码的效果

异常堆栈信息

异常堆栈是什么?


测试项目代码

⚠⚠ 必须提供完整可运行且包含错误的 Git 仓库 DEMO,DEMO 提供最简单的错误逻辑代码,否则将无法得到答复。⚠⚠

您的代码下载地址?


数据库信息和版本

请提供安装的 Nuget 包版本号。

  • Sqlite(包名和版本号?)
  • SqlServer(包名和版本号?)
  • MySQL(包名和版本号?)
  • Oracle(包名和版本号?)
  • PostgreSQL(包名和版本号?)
  • Firebird(包名和版本号?)
  • Cosmos(包名和版本号?)
  • InMemoryDatabase(包名和版本号?)

期待结果

期待的结果是?
1.可以设置,或者怎么通过框架实现这个功能的建议
2.远程请求的异常信息都没有抛出来,问下为什么

确认工单

为了减少不必要的沟通成本和时间成本,请再次确认 Issue 已按照要求正确填写,否则将被直接关闭。

评论 (19)

aixin 创建了任务

1. 先认真看 Issue 内容,严格按照 Issue 模板写

截个图,然后代码全靠猜吗。。。。

2. 文档已经提供,可以先搜索文档

输入图片说明

输入图片说明

您好,下次会贴上代码的,,不过这个问题还是没有解决,代码图
输入图片说明
网上找的post请求

添加了withEncoderurl(false)尝试之后依旧是编码被urlcode,第二张图的效果,就是添加以后的,

那就认认真真的按照 Issue 规范编写, 提供复现错误的代码。

我始终不明白,一两分钟的事情,为什么要浪费一两天的时间去来回交流呢?

没有下次,这么多 Issue,凡是说下次的,我至今没见过有下次的。

麻烦提供 demo,我不会对着你的图片配置环境,对着你的图片抄代码,然后浪费时间去揣测。

因为确实不知道怎么写正规的issue(这个真不是开玩笑,半路出家,确实有些做的不够好)。

您好,是提供个链接的意思么?https://gitee.com/wang_bo6675/friion-remote-test.git 直接可以启动,

百小僧 任务状态待办的 修改为已完成

你换位思考一下,我给你这两张图片(你提供的),你看你10分钟能否把代码运行环境配置好了,你来抄代码。

输入图片说明

输入图片说明

974299 monksoul 1578937227 百小僧 拥有者
回复 百小僧 拥有者

你来对着这两张图抄一个项目出来看看。

对不起,我确实没想到,

序言

感谢终于提供了 Demo,经过测试,问题存在,不是框架的问题,但框架理应解决。

问题分析

HttpClient 中发送 application/x-www-form-urlencoded 请求类型的内容对象使用的是 FormUrlEncodedContent 对象,这个对象底层默认对参数进行了 Uri.EscapeDataString 编码,可查看 .NET Core 底层源码:

https://github.com/dotnet/runtime/blob/478571ca82dedc4f07f6a176709224adf3ee367a/src/libraries/System.Net.Http/src/System/Net/Http/FormUrlEncodedContent.cs#L42

输入图片说明

所以就会导致中文或者特殊字母出现编码情况。

框架解决

了解了 .NET Core 底层之后,框架做出了调整,如果没有配置 WithEncodeUrl(false),那么不做任何处理,如果配置了,那么通过 new StringContent 进行模拟 FormUrlEncodedContent 底层,如:

输入图片说明

代码提交记录:

adebfd6#bf2eba07ca1df44493906e44b28e3938723535c6_707_709

输入图片说明

测试代码

1. 不配置 .WithEncodeUrl(false) 的情况

var obj = new
{
    id = 1,
    name = "百小僧",
    age = 30
};

var res = await "https://localhost:5001/test"
            .SetBody(obj, "application/x-www-form-urlencoded")
            .PostAsync();

输入图片说明

输入图片说明

2. 配置 .WithEncodeUrl(false) 的情况

var obj = new
{
    id = 1,
    name = "百小僧",
    age = 30
};

var res = await "https://localhost:5001/test"
            .SetBody(obj, "application/x-www-form-urlencoded")
            .WithEncodeUrl(false)
            .PostAsync();

输入图片说明

输入图片说明

结语

认认真真编写 Issue,提供复现错误的 Demo,可以节省很多不必要的时间。

版本更新

将在下个版本 v4.8.4(今天)发布。

收到,谢谢啦

百小僧 添加了
 
优化
标签
百小僧 添加了
 
新功能
标签
百小僧 添加了
 
漏洞
标签
百小僧 里程碑设置为v4.8.4
百小僧 关联分支设置为v4
百小僧 计划截止日期设置为2022-12-31
百小僧 计划开始日期设置为2022-12-30

Furion v4.8.4 版本已发布,已修正

您好,得再麻烦下您,这个问题还差最后的返回结果没有解决,
返回值
(我上面那个post的)respMsg = 入场信息重复, 请检查后再上传!
(框架的)respMsg = �볡��Ϣ�ظ�, ��������ϴ�!
希望得到的结果:可以设置返回值的编码类型,或者使用入参一致的编码

https://www.bbsmax.com/A/QV5ZGee4dy/   怎么响应gbk格式的响应体
您的意思我没有看懂,不知道怎么实现,框架不是没提供修改这个的功能,

框架提供任何修改,麻烦可以看看远程请求拦截器,可以篡改任何数据,返回值等等....另外,以后提供的例子是复现错误的Demo,而不是完整的项目,比如你把 Admin.NET 代码放上去了。

没有通过拦截器实现,真不会用,看了看您写的代码,才想到直接获取字节数组,转换编码。还是格局太低,大佬牛逼输入图片说明

以后出错的例子,会尽我能做好。

感谢,希望能多多理解,我一天面对的qq,微信,issue,还有很多来自各个平台的用户反馈非常之多,人的一天只有24个小时,如果每一个issue都需要来回沟通(没有提供复现错误的 Demo),处理半小时或一个小时以上,那么一天解决不了几个问题。

当然发展 Furion 团队也迫在眉睫,但这事急不来。

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
974299 monksoul 1578937227
C#
1
https://gitee.com/dotnetchina/Furion.git
git@gitee.com:dotnetchina/Furion.git
dotnetchina
Furion
Furion

搜索帮助