1

我正在尝试对 JustOneDB 执行 https GET,如果我从 curl 实用程序执行此操作,它会起作用。但它不适用于 C#。我收到 (400) 错误请求

我四处搜索并禁用了安全性以及所有这些,但它仍然无法正常工作。有任何想法吗?有没有人用休息和 JustOneDB 做过这个?

这与所有其他其余示例一起工作:

curl -k -XGET 'https://username:password@77.92.68.105:31415/justonedb/database/database name'

这不起作用:我对字符串进行了模拟以删除我的密码。

   public ActionResult JustOneDb()
    {
        ///////////
        HttpWebRequest request = null;
        HttpWebResponse response = null;
        try
        {

            String Xml;
            //curl -k -XGET 'https://zn0lvkpdhdxb70l2_DUMMY_urshn5e7i41lb3fiwuh@77.92.68.105:31415/justonedb/database/n10lvkpdhdxei0l2uja'
            string url = @"https://zn0lvkpdhdxb70_DUMMY_urshn5e7i41lb3fiwuh@77.92.68.105:31415/justonedb/database/n10lvkpdhdxei0l2uja";

            request = (HttpWebRequest)WebRequest.Create(url);

            request.Method = "GET";

            request.Credentials = CredentialCache.DefaultCredentials;

            // Ignore Certificate validation failures (aka untrusted certificate + certificate chains)
            ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true); 


            // Get response 
            using (response = (HttpWebResponse)request.GetResponse())
            {
                // Get the response stream 
                StreamReader reader = new StreamReader(response.GetResponseStream());
                Xml = reader.ReadToEnd();
            }
            return Content(Xml);
        }
        catch (Exception ee)
        {
            return Content(ee.ToString());

        }
        //////////////

        ViewBag.fn = "*.xml";
        return View();
    }

结果:

System.Net.WebException: The remote server returned an error: (400) Bad Request. at System.Net.HttpWebRequest.GetResponse() 
at Mvc3Razor.Controllers.MyXmlController.JustOneDb() ...

TIA FxM:{

4

3 回答 3

1

您应该使用“用户名”和“密码”创建正确的凭据,而不是在 url 中传递用户名密码。您可能还想考虑使用类似RestSharp而不是 raw 的东西WebRequest

于 2012-04-05T18:45:26.507 回答
0

好的,我复制了代码,问题是HttpWebRequest库没有在原始请求中添加身份验证头。解决方案是手动插入标头,因此如果在 'request.Method = "GET" 行之后添加以下两行(并从 URL 字符串中删除用户名/密码):

string authInfo = "zn0lvkpdhdxb70l2_DUMMY_urshn5e7i41lb3fiwuh";
request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(Encoding.Default.GetBytes(authInfo));

它应该可以正常工作。

于 2012-04-11T11:54:29.773 回答
0

证书不匹配,已修复。它仍然是自签名的,但现在主机名匹配。我们将很快更改为使用完全签名的证书,但同时请让我知道它是否仅适用于自签名覆盖。

于 2012-04-10T14:47:39.593 回答