2012-04-05 40 views
1

我试图做一个HTTPS GET来JustOneDB如果我来自卷边工具做它的工作原理。但它不从C#工作。 我得到(400)错误的请求Appharbor JustOneDB HTTPS从C#获取请求400错误

我搜索周围和残疾保障,一切如此,但它仍然没有工作。有任何想法吗? 有没有人这样做休息和JustOneDB?

这一起瓦特/所有其他剩下的例子工程:

curl -k -XGET 'https://username:[email protected]:31415/justonedb/database/database name'

这不起作用:我空置的字符串删除我的密码。

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

      String Xml; 
      //curl -k -XGET 'https://[email protected]:31415/justonedb/database/n10lvkpdhdxei0l2uja' 
      string url = @"https://[email protected]: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:{

回答

1

而是在URL中传递的用户名密码,你应该创建一个 “用户名” 和 “密码” 正确的凭据。您可能还想考虑使用类似RestSharp而不是原始WebRequest

+0

RestSharp也没有工作。我认为这与证书有关。其他https网站的工作。卷曲起作用。真的很想做Rest to JustOneDb导致相同的应用程序有一个Perl的和平。 谢谢。 – FxM 2012-04-07 00:29:37

+0

对,我会联系JustOneDB的人。 – friism 2012-04-07 00:38:27

0

有与证书,其已被固定的失配。它仍然是自签名的,但现在主机名匹配。我们将尽快更改为使用完全签名的证书,但同时请让我知道它是否适用于自签名覆盖。

+0

它仍然不起作用。点网更严格,然后使用卷曲。 TA – FxM 2012-04-10 17:43:59

0

好的,我复制的代码,所述问题是HttpWebRequest的库不加入在原始请求中的认证报头。解决的办法是手动插入报头,因此,如果(从URL字符串和删除用户名/密码)“request.Method =‘GET’线后添加以下两行:

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

它应该正常工作。