C#中的WebRequests到REST API服务器

时间:2015-05-06 14:21:24

标签: c# authentication httpwebrequest

我对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#中由我的客户处理整个过程?

2 个答案:

答案 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的建议:

  • 不要使用nexted路径,尝试使用平面的服务和操作列表。
  • 如果操作是网址的一部分,请不要使用高级HTTP操作,GET和POST就足够了。
  • 不要对您的应用错误代码使用HTTP错误代码,这可能会导致混淆,并且会阻止您返回复杂的错误代码并获得部分成功。
  • 将您的API描述公开为XML以启用客户端库生成,例如Kaltura

您还可以找到实现这些主体的C#服务器实现example