6K Star 11.8K Fork 4K

GVPdotNET China / Furion

 / 详情

远程请求setbody参数识别不了

已完成
成员
创建于  
2021-06-20 15:52

特别说明:如果 Issue 报告为问题且开发成员回复确认问题之后但三天内都不能得到反馈,则视为无效Issue。

Furion 版本号

2.9.3


Web 项目类型

  • WebApi
  • Mvc
  • Razor Pages
  • Blazor Server

描述你的问题

远程请求设置 Body 参数,后台服务一直返回识别不了参数


代码或代码仓库

输入图片说明

上面红色框里面的代码正常,下面用咱furion请求一直识别不了参数image,下面是服务接口说明
输入图片说明


数据库信息

  • Sqlite
  • SqlServer
  • Mysql
  • Oracle
  • PGSql
  • Firebird
  • Cosmos

期待结果


评论 (4)

zuohuaijun 创建了任务
zuohuaijun 关联仓库设置为dotNET China/Furion
zuohuaijun 修改了描述
展开全部操作日志

无法测试,issue无效,没时间去搭建环境,获取token参数等,麻烦提供测试代码,异常代码,完整错误堆栈

public async Task UploadFile(IFormFile file)
{
    using var fileStream = file.OpenReadStream();
    byte[] imageBytes = new byte[file.Length];
    fileStream.Read(imageBytes, 0, (int)file.Length);
    var imageBase64 = HttpUtility.UrlEncode(Convert.ToBase64String(imageBytes));

    string token = "24.af39d5d2cae26aa197a55be6ee93049c.2592000.1626768578.282335-24400792";
    string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/taxi_receipt?access_token=" + token;

    // 正常
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
    request.Method = "post";
    request.KeepAlive = true;
    var str = "image=" + imageBase64; // 参数用“=”连接
    byte[] buffer = Encoding.Default.GetBytes(str);
    request.ContentLength = buffer.Length;
    request.GetRequestStream().Write(buffer, 0, buffer.Length);
    var response = (HttpWebResponse)request.GetResponse();
    var reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
    var res = reader.ReadToEnd();
    Console.WriteLine(res);

    // 不正常
    var res2 = await host.SetBody(new { image = imageBase64 }).GetAsStringAsync();
    Console.WriteLine(res2);
}

1、你犯了非常低级的错误,你竟然带 Body 参数用了 Get 请求!!!!!!!!
2、.NET Core 传递 application/x-www-form-urlencoded 参数无需自己 HttpUtility.UrlEncode 编码!!

正确应该是:

public async Task UploadFile(IFormFile file)
        {
            using var fileStream = file.OpenReadStream();
            byte[] imageBytes = new byte[file.Length];
            fileStream.Read(imageBytes, 0, (int)file.Length);
            // 这里不需要编码!!!!!application/x-www-form-urlencoded 自动编码!!!
            //var imageBase64 = Uri.EscapeDataString(Convert.ToBase64String(imageBytes));

            string token = "24.af39d5d2cae26aa197a55be6ee93049c.2592000.1626768578.282335-24400792";
            string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/taxi_receipt?access_token=" + token;

            var res2 = await host.SetBody(new { image = Convert.ToBase64String(imageBytes) }, "application/x-www-form-urlencoded").PostAsStringAsync();
            Console.WriteLine(res2);
        }
百小僧 任务状态待办的 修改为已完成
百小僧 负责人设置为百小僧
百小僧 添加了
 
无法重现
标签
百小僧 添加了
 
疑问
标签
百小僧 里程碑设置为Furion 2021
百小僧 关联分支设置为master
百小僧 计划截止日期设置为2021-06-21
百小僧 计划开始日期设置为2021-06-20
百小僧 计划截止日期2021-06-21 修改为2021-06-20

多谢 :+1: 我的理解问题,我还显示的设置请求方式SetHttpMethod :sweat_smile:

百小僧 关联分支master 修改为未关联

登录 后才可以发表评论

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

搜索帮助