“Accept”头必须使用适当的属性或方法进行修改。参数名称:名称。

9
收到错误信息 - 必须使用适当的属性或方法修改“Accept”标头。我在Postman中收到了响应,但在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

code

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);
3个回答

7
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;"; - FrankM
嗨,我被同样的问题困住了,你有线索吗?我的意思是如何在Node.js、PHP或Python中执行... - Viraj Mohite

7

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

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

以下是允许使用的Web标头列表:
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

希望这能帮到你!

1
这对我有用。我正在使用.NET Framework 4.6.1。 WebRequest类没有“Accept”方法。有人知道这个方法怎么了吗? - maximus
1
你能为此添加一个解释吗?乍一看,它看起来像是完全的魔法,我的自发反应只是“什么鬼?!” - Honza Zidek
你所看到的列表是HttpRequestHeader枚举。 - Eduardo Garcia
文档中提到:“在.NET Framework上,一些常见的标头被认为是受限制的,要么通过API直接公开(例如Content-Type),要么受系统保护,无法更改。”不过,这些原始术语似乎适用于.NET Core。 - phrebh

3

使用 System.Net.HttpWebRequest 对象而非 System.Net.WebRequest 对象。

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://learn.microsoft.com/zh-cn/dotnet/api/system.net.httpwebrequest.accept?view=netframework-4.6


文档中指出不建议使用HttpWebRequest:“我们不建议您在新开发中使用HttpWebRequest。相反,请使用System.Net.Http.HttpClient类。”文档还指出,使用WebRequest.Create将根据需要创建HttpWebRequest。 - phrebh
@phrebh 好的... 我需要回去复习一下那个。谢谢。 - robnick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接