我对WebRequests完全不熟悉。我需要实现几个WebRequests来从服务器接收json文件。从服务器我知道:
验证
每个请求的身份验证都是通过令牌完成的。系统管理员将为您提供 您的令牌,必须与每个请求一起使用。令牌应该保持安全(如 密码)因为它为其中的任何人提供了相关用户的完全访问权限 有
接头
标准HTTP标头可用于促进连接保持活动,缓存,压缩等。 所有请求都需要以下标题
接受:application / json
授权:<身份验证令牌>
我搜索了一些示例,并找到了我尝试过的WebRequest实现:
public string LoadHttpPageWithBasicAuthentication(string url, string username, string password)
{
Uri myUri = new Uri(url);
WebRequest myWebRequest = HttpWebRequest.Create(myUri);
HttpWebRequest myHttpWebRequest = (HttpWebRequest)myWebRequest;
myHttpWebRequest.Method = "GET";
myHttpWebRequest.ContentType = ".json";
NetworkCredential myNetworkCredential = new NetworkCredential(username, password);
CredentialCache myCredentialCache = new CredentialCache();
myCredentialCache.Add(myUri, "Basic", myNetworkCredential);
myHttpWebRequest.PreAuthenticate = true;
myHttpWebRequest.Credentials = myCredentialCache;
WebResponse myWebResponse = myWebRequest.GetResponse();
Stream responseStream = myWebResponse.GetResponseStream();
StreamReader myStreamReader = new StreamReader(responseStream, Encoding.Default);
string pageContent = myStreamReader.ReadToEnd();
responseStream.Close();
myWebResponse.Close();
return pageContent;
}
我叫它
string ret=Request.LoadHttpPageWithBasicAuthentication(@"https://epica.ecninside.ecn.nl/lots", "aaa", "ccc");
File.WriteAllText("c:\\MyTransfer\\content.html", ret);
不幸的是,我的内容始终是正常的登录页面,而不是任何有用的数据。如果我使用浏览器,则首先会显示此登录页面。登录后,我收到了数据。但是如何在c#中由我的客户处理整个过程?
答案 0 :(得分:0)
这里有一些事情。
您是在下载JSON 文件,还是服务器直接向您发送JSON?无论哪种方式,您的内容类型都是错误的。如果服务器使用JSON进行响应,则您的内容类型应为application/json
。如果它实际上向您发送了包含JSON的文本文件,则您的内容类型应为text/plain
。
接下来,他们的文档说每个请求都需要一个接受标头。所以你需要添加一行:
myHttpWebRequest.Accept = "application/json";
最后,他们说每个请求都需要一个令牌随之发送。我怀疑这就是你的请求返回登录页面的原因,而不是你怀疑的数据。通常使用令牌代替用户/传递,因此在这种情况下HTTP基本身份验证是否有效是值得怀疑的。我首先尝试这个:
myHttpWebRequest.Headers.Add("Authorization", "your_token");
答案 1 :(得分:0)
请先查看我对creating a new REST server的建议:
您还可以找到实现这些主体的C#服务器实现example。