【问题标题】:The 'Accept' header must be modified using the appropriate property or method. Parameter name: name必须使用适当的属性或方法修改“接受”标头。参数名称:名称
【发布时间】:2018-05-19 08:52:23
【问题描述】:

收到错误消息 - 必须使用适当的属性或方法修改“接受”标头。 我在邮递员中得到响应,但没有进入 MVC 控制器 我有一个带有以下标头的基本身份验证 api。在请求中添加接受标头时出现错误

Content-Type:  application/vnd.onem2m-res+json;ty=4;
Accept: application/vnd.onem2m-res+json;
Cache-Control: no-cache
X-M2M-RI: 9900001
Authorization: Basic QzdBQUNFO
X-M2M-Origin: C7AACE9-25

代码

WebRequest req = WebRequest.Create(@"url");
                req.Method = "GET";
                req.Headers["Authorization"] = "Basic " + "QzdBQUNFO";
                req.ContentType = "application/vnd.onem2m-res+json";
                req.Headers.Add("Accept", "application/vnd.onem2m-res+json;");
                req.Headers["Cache-Control"] = "no-cache";
                req.Headers["X-M2M-RI"] = "9900001";
                req.Headers["X-M2M-Origin"] = "C7AACE9-25";
                HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
                var encoding = resp.CharacterSet == "" ? Encoding.UTF8 : Encoding.GetEncoding(resp.CharacterSet);

【问题讨论】:

    标签: c# .net http-headers webrequest


    【解决方案1】:
    WebRequest req = WebRequest.Create(@"url");
                req.Method = "GET";
                req.Headers["Authorization"] = "Basic " + "QzdBQUNFO";
                req.ContentType = "application/vnd.onem2m-res+json";
                req.Accept = "application/vnd.onem2m-res+json";
                req.Headers["Cache-Control"] = "no-cache";
                req.Headers["X-M2M-RI"] = "9900001";
                req.Headers["X-M2M-Origin"] = "C7AACE9-25";
                HttpWebResponse resp = req.GetResponse() as HttpWebResponse;
                var encoding = resp.CharacterSet == "" ? Encoding.UTF8 : Encoding.GetEncoding(resp.CharacterSet);
    

    microsoft docs

    【讨论】:

    • 该行似乎有语法错误:req.Accept "application/vnd.onem2m-res+json;";
    • 您好,我也遇到了同样的问题,您知道了吗,我的意思是如何在 nodejs 或 php 或 python 中执行...
    【解决方案2】:

    在以下某些情况下,您必须更改标题名称:

    //req.Headers.Add("Accept", "application/vnd.onem2m-res+json;");
    req.Headers.Add("20", "application/vnd.onem2m-res+json;");
    

    以下是允许的网页标题列表:

    CacheControl = 0
    Date = 2
    Connection = 1
    Date = 2
    KeepAlive = 3
    Pragma = 4,
    Trailer = 5
    TransferEncoding = 6
     Upgrade = 7
    Via = 8
    Warning = 9
    Allow = 10
    ContentLength = 11
    ContentType = 12
    ContentEncoding = 13
    ContentLanguage = 14
    ContentLocation = 15
    ContentMd5 = 16
     ContentRange = 17
    Expires = 18
    LastModified = 19
    Accept = 20
    AcceptCharset = 21
    AcceptEncoding = 22
    AcceptLanguage = 23
    Authorization = 24
    Cookie = 25
    Expect = 26
    From = 27
    Host = 28
    IfMatch = 29
     IfModifiedSince = 30
    IfNoneMatch = 31
     IfRange = 32
    IfUnmodifiedSince = 33
    MaxForwards = 34
    ProxyAuthorization = 35
    Referer = 36
     Range = 37
    Te = 38
    Translate = 39
    UserAgent = 40
    

    希望对你有帮助!

    【讨论】:

    • 这对我有用。我正在使用 .NET Framework 4.6.1。 WebRequest 类没有“Accept”方法。有谁知道这种方法发生了什么?
    • 您能对此添加解释吗?乍一看,它看起来像是一个完整的魔法,我的本能反应只是“wft?!”
    • 您看到的列表是 HttpRequestHeader 枚举
    • 文档说“在 .NET Framework 上,一些常见的标头被认为是受限制的,要么直接由 API 公开(例如 Content-Type),要么受系统保护且无法更改。”不过,原始条款似乎适用于 .NET Core。
    【解决方案3】:

    不要使用 System.Net.WebRequest 对象,而是使用 System.Net.HttpWebRequest 对象。

    WebRequest 对象不支持 Accept 属性,但 HttpWebRequest 对象支持。示例代码:

    // Create a 'HttpWebRequest' object which support Accept property
    HttpWebRequest req=(HttpWebRequest)WebRequest.Create(@"url");
                    req.Method = "GET";
                    req.Headers["Authorization"] = "Basic " + "QzdBQUNFO";
                    req.ContentType = "application/vnd.onem2m-res+json";
                    req.Accept = "application/vnd.onem2m-res+json;";
                    req.Headers["Cache-Control"] = "no-cache";
                    req.Headers["X-M2M-RI"] = "9900001";
                    req.Headers["X-M2M-Origin"] = "C7AACE9-25";
    

    微软文档: https://docs.microsoft.com/en-us/dotnet/api/system.net.httpwebrequest.accept?view=netframework-4.6

    【讨论】:

    • 文档说不要使用 HttpWebRequest:“我们不建议您使用 HttpWebRequest 进行新的开发。而是使用 System.Net.Http.HttpClient 类。”它继续说 WebRequest.Create 将根据需要创建 HttpWebRequest。
    • @phrebh 好的......我将不得不回去回顾一下。谢谢。
    猜你喜欢
    • 2017-12-17
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2012-02-28
    • 1970-01-01
    相关资源
    最近更新 更多