c# - 发布到服务器时 Gzip MultipartFormDataContent 超时

标签 c# .net http gzip

我正在尝试在真实案例场景中发布 MultipartFormDataContent,数据内容对象可以包含从简单字符串到视频文件的任何内容,我在那里使用序列化对象,这只是一个概念证明。
另外我想指出,使用 JSON 对象不会服务于我的现实生活场景

 public class GzipMultipartContent : MultipartFormDataContent
 {
    public GzipMultipartContent()
    {
       Headers.ContentEncoding.Add("gzip");
    }

    protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
    {
        return Task.Factory.StartNew(() =>
        {
            using (var gzip = new GZipStream(stream, CompressionMode.Compress, true))
                base.SerializeToStreamAsync(gzip, context);
        });
    }
}

这是我怎么称呼它的
var gzipped = new GzipMultipartContent();
var test = new TestClass();
gzipped.Add(new StringContent(JsonConvert.SerializeObject(test)), "value");
var client = new HttpClient();
var result = client.PostAsync("http://localhost:60001/api/Home/", gzipped).Result;

这是 Controller 中的 post 操作
// POST: api/Home
[HttpPost]
public void Post([FromForm] object value)
{

}

我在服务器端添加了一个断点并确保它甚至没有到达 Post 方法,我也尝试过使用正常的 POST 请求来确保它不是服务器配置问题或 URL 输入错误

最佳答案

我不确定我是否理解这个问题,但如果是你的请求没有到达服务器,而你的“正常”POST 请求是,那么我想我发现了你的问题。

我认为问题在于您的服务器不知道它的内容类型是什么。我从字面上复制粘贴了您的代码,但添加了

Headers.ContentType = new MediaTypeHeaderValue("application/x-gzip"); 

GzipMultipartContent.cs Actor 。

添加类型后,我在本地主机服务器中遇到了断点。

来源:Content-Type

In requests, (such as POST or PUT), the client tells the server what type of data is actually sent.

关于c# - 发布到服务器时 Gzip MultipartFormDataContent 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61387876/

相关文章:

c# - VS 2017 版本 15.5.1 - Unresolved System.Net.Http 项目引用

c# - 设计WPF控件时如何查看折叠的元素?

.net - sn.exe 失败并显示拒绝访问错误消息

Java、套接字连接和 HTTP 请求/响应

http - 如何在 flutter 中使用 session 用户?

c# - 依赖注入(inject)到 {get;设置;} 属性

c# - 在数据集中添加新行时检查重复项的最佳方法?

c# - 统一游戏管理器。脚本只工作一次

.net - ASP.NET MVC 应用程序自行重启

c - C语言向服务器发送HTTP请求后什么也没有收到