【问题标题】:How to set Accept and Accept-Language header fields?如何设置 Accept 和 Accept-Language 标头字段?
【发布时间】:2017-08-29 12:19:09
【问题描述】:

我可以设置 Request.Content-Type = ... , Request.Content-Length = ...

如何设置Accept和Accept-Language?

我想上传一个文件 (RFC 1867),需要创建一个这样的请求:

POST /test-upload.php.xml HTTP/1.1 主机:example.com 用户代理:Mozilla/5.0 (Windows NT 5.2; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1 接受:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 接受语言:tr-tr,tr;q=0.8,en-us;q=0.5,en;q=0.3 接受编码:gzip,放气 接受字符集:ISO-8859-9,utf-8;q=0.7,*;q=0.7 保活:115 连接:保持活动 内容类型:multipart/form-data;边界=----------------------------21724139663430 内容长度:56048

【问题讨论】:

    标签: c# httpwebrequest


    【解决方案1】:

    看看Accept property

    HttpWebRequest myHttpWebRequest=(HttpWebRequest)WebRequest.Create(myUri);
    myHttpWebRequest.Accept="image/*";    
    HttpWebResponse myHttpWebResponse=
             (HttpWebResponse)myHttpWebRequest.GetResponse();
    

    This MSDN article 展示了如何将自定义标头添加到您的请求中:

    //Get the headers associated with the request.
    WebHeaderCollection myWebHeaderCollection = myHttpWebRequest.Headers;    
    
    //Add the Accept-Language header (for Danish) in the request.
    myWebHeaderCollection.Add("Accept-Language:da");
    
    //Include English in the Accept-Langauge header. 
    myWebHeaderCollection.Add("Accept-Language","en;q=0.8");
    

    【讨论】:

    • 但是现在我有一个问题...我发送图像和音频文件,但只发送图像文件。没有音频文件。可能是关于我的标题或属性吗?
    • @Mennan:什么问题?
    • @Mennan:你可能不得不问一个包含适当信息量的另一个问题,如果没有适当的代码示例和结果描述,很难说什么
    • 嗯好的明白我会在 10 分钟内完成。谢谢您的帮助
    【解决方案2】:

    当你想设置Accept类型和内容类型时,只需将webrequest转换为HttpwebRequest

    var webreq= (HttpWebRequest)WebRequest.Create(requestUri);
    webreq.Method = "POST";
    webreq.Accept = "application/json";
    webreq.ContentType = "application/json";
    

    【讨论】:

      【解决方案3】:

      您需要确保将请求类型转换为 (HttpWebRequest),其中接受标头属性可用。

      在旧的 WebRequest 类中,Accept 标头不可访问。

      【讨论】:

        【解决方案4】:

        经过几次烦人的尝试后,我必须确认

        myWebHeaderCollection.Add("foo","bar"); 解决方案完美运行。

        如果你想设置语言。

        myWebHeaderCollection.Add("AcceptCharset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7");
        myWebHeaderCollection.Add("TransferEncoding", "gzip,deflate");
        

        但不设置值。鉴于第一个有效,这似乎是一个合乎逻辑的结论。

        【讨论】:

        • 令人恼火(因为它难以理解)然而,Microsoft 不仅选择忽略 HTTP 模型,而是发明了他们自己的“方便”模型(例如,通过在表示请求的对象上具有 Accept 属性,当这只是一个 HTTP 标头),但是甚至不确保泛型方法有效,从而雪上加霜!尝试用它设置“Accept”,你会得到 ArgumentException 说你不能设置“restricted headers”(他们模型的工件,与 HTTP 无关)。
        【解决方案5】:

        如果您使用HttpRequestMessage,请使用 Headers.Add 方法设置标题。在你的情况下:

        request.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-13
          • 2010-12-12
          • 2018-01-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多