首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HttpContent边界双引号

HttpContent边界双引号
EN

Stack Overflow用户
提问于 2015-06-19 06:08:14
回答 3查看 3.5K关注 0票数 13

我有这个代码样本,它是作为另一个问题(Send a file via HTTP POST with C#)的答案发布的。它工作得很好,除了一个问题。它用双引号将HTTP标头中的边界括起来:

多部分/表单数据;boundary="04982073-787d-414b-a0d2-8e8a1137e145“

这会阻塞我正在尝试调用的the服务。浏览器没有那些双引号。我得找个办法告诉.NET别再玩了。

代码语言:javascript
复制
private System.IO.Stream Upload(string actionUrl, string paramString, Stream paramFileStream, byte [] paramFileBytes)
{
    HttpContent stringContent = new StringContent(paramString);
    HttpContent fileStreamContent = new StreamContent(paramFileStream);
    HttpContent bytesContent = new ByteArrayContent(paramFileBytes);
    using (var client = new HttpClient())
    using (var formData = new MultipartFormDataContent())
    {
        formData.Add(stringContent, "param1", "param1");
        formData.Add(fileStreamContent, "file1", "file1");
        formData.Add(bytesContent, "file2", "file2");
        var response = client.PostAsync(actionUrl, formData).Result;
        if (!response.IsSuccessStatusCode)
        {
            return null;
        }
        return response.Content.ReadAsStreamAsync().Result;
    }
}
EN

回答 3

Stack Overflow用户

发布于 2018-01-22 04:00:44

您可以使用以下代码从边界中删除引号:

代码语言:javascript
复制
var boundary = formData.Headers.ContentType.Parameters.First(o => o.Name == "boundary"); 
boundary.Value = boundary.Value.Replace("\"", String.Empty);    
票数 9
EN

Stack Overflow用户

发布于 2020-04-24 14:54:28

similar issue in the dotnet runtime repo中展开讨论。选择不带引号包括两个步骤

  1. 选择您自己的不带引号的boundary
  2. remove自动生成的

标题,其中一个不带引号

代码语言:javascript
复制
private System.IO.Stream Upload(string actionUrl, string paramString, Stream paramFileStream, byte [] paramFileBytes)
{
    HttpContent stringContent = new StringContent(paramString);
    HttpContent fileStreamContent = new StreamContent(paramFileStream);
    HttpContent bytesContent = new ByteArrayContent(paramFileBytes);
    //Set your own boundary, otherwise the internal boundary between multiple parts remains with quotes
    string boundaryDelimiter = String.Format("----------{0}", DateTime.Now.Ticks.ToString("x"));
    using (var client = new HttpClient())
    using (var formData = new MultipartFormDataContent(boundaryDelimiter))
    {
        formData.Add(stringContent, "param1", "param1");
        formData.Add(fileStreamContent, "file1", "file1");
        formData.Add(bytesContent, "file2", "file2");
        //remove quotes from ContentType Header
        _multiPartContent.Headers.Remove("Content-Type");
        _multiPartContent.Headers.TryAddWithoutValidation("Content-Type", "multipart/form-data; boundary=" + boundaryDelimiter);

        var response = client.PostAsync(actionUrl, formData).Result;
        if (!response.IsSuccessStatusCode)
        {
            return null;
        }
        return response.Content.ReadAsStreamAsync().Result;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2021-02-19 19:51:22

这是一个老问题,但我也有同样的问题,用@Luis Perez在他的答案中指出的同样的方法解决了,但使用它有一个缺点,MultipartContent不再计算内容大小,所以这是我的解决方案:

代码语言:javascript
复制
var multipartContent = new MultipartFormDataContent();
var boundaryParameter = multipartContent.Headers.ContentType
                                        .Parameters.Single(p => p.Name == "boundary");
boundaryParameter.Value = boundaryParameter.Value.Replace("\"", "");

// --- Put the rest of content here

var size = (await multipartContent.ReadAsStreamAsync()).Length;
multipartContent.Headers.ContentLength = size;

希望这能对外面的人有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30926645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档