当前位置: 首页 > 知识库问答 >
问题:

带有自定义头的C#HttpClient POST请求发送不正确的内容类型头字段

姜乐语
2023-03-14

我在Windows10上的VisualStudio中用C#编写了一个示例代码,该代码试图将带有自定义头的POST请求发送到运行在的服务http://localhost:9998这是失败的。

当我查看请求时,内容类型标题字段将作为ContentType(无连字符)发送。

httpRequestMessage:方法:POST,请求URI:'http://localhost:9998/,版本:1.1,内容:系统。网Http。ByteArrayContent,标题:{
ContentType:application/vnd.com.documents4j.any-msword Accept:application/pdf转换器作业优先级:1000}响应:状态代码:500,原因短语:“请求失败”,版本:1.1,内容:系统。网Http。流内容,标题:{连接:关闭日期:星期六,2021年4月10日22:39:24GMT内容长度:1031内容类型:文本/HTML;字符集= ISO-8591-1}按任意键继续…

我想知道这是否是问题的原因?

我有用C#编写的代码,使用RestSharp,正确发送Content-Type并返回成功的结果。我有写在Java的代码,也正确发送Content-Type并返回一个成功的结果。

示例代码1[发送ContentType为ContentType的问题]

using System;
using System.Net;
using System.IO;
using System.Net.Http;

namespace HttpPOST10
{
    class Program
    {
        public static string MyUri { get; private set; }
        static void Main(string[] args)
        {
//            string url = "http://localhost:9998";
            string url = "http://localhost:8888"; // Fiddler
            Uri myUri = new Uri(url);
            string srcFilename = @"C:\temp2\Sample.doc";
            string destFileName = @"C:\temp3\Sample-HttpPOST10.pdf";

            UploadFile(url, srcFilename, destFileName);
        }
        private static bool UploadFile(string url, string srcFilename, string destFileName)
        {
            HttpClient httpClient = new HttpClient();
            byte[] data;
            data = File.ReadAllBytes(srcFilename);
            var httpRequestMessage = new HttpRequestMessage
            {
                Method = HttpMethod.Post,
                RequestUri = new Uri(url),
                Headers = {
                    { HttpRequestHeader.ContentType.ToString(), "application/vnd.com.documents4j.any-msword" },
                    { HttpRequestHeader.Accept.ToString(), "application/pdf" },
                    { "Converter-Job-Priority", "1000" },
//                    {"User-Agent",  "RestSharp/106.11.8.0" }
                },
                Content = new ByteArrayContent(data)
            };
            Console.Write("httpRequestMessage:" + httpRequestMessage);
            var response = httpClient.SendAsync(httpRequestMessage).Result;
            Console.Write("response:" + response);

            return true;
        }
    }
}

共有1个答案

尹俊贤
2023-03-14

谢谢吉米——现在得到了成功的回应。

http://localhost:9998/,版本:1.1,内容:系统。网。http://http.ByteArrayContent, Headers:{
ContentType: Application/vnd.com.documents4j.any-mword接受: Application/pdf转换器-作业-优先级: 1000 Content-Type: Application/vnd.com.documents4j.any-mword}响应: StatusCode: 200,原因短语:'OK',版本: 1.1,内容:系统。网。http://http.StreamContent,标头:{不同:接受-编码
传输-编码:组块日期:周一,4月12日2021 03:04:14格林尼治标准时间
内容类型:应用/pdf

代码更改为:

private static bool UploadFile(string url, string srcFilename, string destFileName)
{
    HttpClient httpClient = new HttpClient();
    byte[] data;
    data = File.ReadAllBytes(srcFilename);

    HttpContent content = new ByteArrayContent(data);
    content.Headers.Add("Content-Type", "application/vnd.com.documents4j.any-msword");

    var httpRequestMessage = new HttpRequestMessage
    {
        Method = HttpMethod.Post,
        RequestUri = new Uri(url),
        Headers = {
            { HttpRequestHeader.ContentType.ToString(), "application/vnd.com.documents4j.any-msword" },
            { HttpRequestHeader.Accept.ToString(), "application/pdf" },
            { "Converter-Job-Priority", "1000" },
        },
        Content = content
    };

    Console.Write("httpRequestMessage:" + httpRequestMessage);
                var response = httpClient.SendAsync(httpRequestMessage).Result;
    Console.Write("response:" + response);

    return true;
}
 类似资料:
  • 我有一个使用axios发送post请求的表单。问题在于,发送请求时使用的标题的内容类型为:multipart/form data。我的nodejsapi不喜欢这样,它给了我一个未定义的req。身体 我有其他使用相同技术的表单,它们可以工作,标题与预期的一样:Content-Type:application/json;字符集=UTF-8 张贴Content-Type: Multipart/form-

  • 我需要发送一个GET请求,标题是:。我期待服务器的XML响应。我用邮递员测试了请求和响应,一切都很好。但是,当我尝试在Spring中使用执行此操作时,我总是会收到400个错误请求。的异常是: 我的代码: 调试消息将标头显示为,这似乎是正确的。我想知道我的请求出了什么问题,以及是否有一种方法可以看到在线调试的请求。

  • 我是一个使用angular的新手,我正在努力学习一点,但我不能使用令牌进行简单的获取。我做了很多研究,最后总是得到这段代码。 对于我的后端,我使用Kotlin/Springboot并配置了Cors。 即使如此,当尝试这样做请求我得到这个错误。 访问位于“”的XMLHttpRequesthttp://localhost:5000/api-v1/来源的帐户/列表 -- 果心js:15713错误Http

  • 如何将自定义标头添加到HttpClient请求?我使用方法发布JSON。我需要添加的自定义标题是 这是我到目前为止所做的:

  • 我使用django rest框架作为后端,并试图使用请求标头中的令牌来验证角请求,但角没有发送任何标头值。我已经尝试了所有的方法添加头请求 访问控制请求标头:访问控制允许标头、访问控制允许来源、授权、内容类型访问控制请求方法:GET DNT:1来源:http://localhost:4001推荐人:http://localhost:4001/