Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# HttpContent边界双引号_C#_Boundary_Httpcontent - Fatal编程技术网

C# HttpContent边界双引号

C# HttpContent边界双引号,c#,boundary,httpcontent,C#,Boundary,Httpcontent,我有这个代码示例,它是作为另一个问题()的答案发布的。除了一个问题外,它工作正常。它用双引号包围HTTP标头中的边界: 多部分/表格数据;边界=“04982073-787d-414b-a0d2-8e8a1137e145” 这使我试图调用的Web服务窒息。浏览器没有那些双引号。我需要一些方法告诉.NET不要使用它们 private System.IO.Stream Upload(string actionUrl, string paramString, Stream paramFileStream

我有这个代码示例,它是作为另一个问题()的答案发布的。除了一个问题外,它工作正常。它用双引号包围HTTP标头中的边界:

多部分/表格数据;边界=“04982073-787d-414b-a0d2-8e8a1137e145”

这使我试图调用的Web服务窒息。浏览器没有那些双引号。我需要一些方法告诉.NET不要使用它们

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;
    }
}

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

var boundary = formData.Headers.ContentType.Parameters.First(o => o.Name == "boundary"); 
boundary.Value = boundary.Value.Replace("\"", String.Empty);    

以一种新的方式在磁盘上扩展。 选择不使用引号涉及两个步骤

  • 选择自己的非引用边界
  • 删除自动生成的ContentType标头,其中一个标头不带引号

  • 这是一个老问题,但我遇到了相同的问题,并以@Luis Perez在其回答中指出的相同方式解决了问题,但使用该方法有一个缺点,即MultipartContent停止计算内容大小,因此这是我的解决方案:

    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;
    
    希望这对其他人有所帮助。

    这里已经回答了:
    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;