2010-12-28 17 views
1

無料のウィジェットベースのopenIDを組み込むためにJanrain Engageにサインアップしました。しかし、私はどのような値をC#コードの後ろに置くのか分からない。私を許してJanrain EngageのヘルプopenID C#コードの後ろにasp.netフォームのWebサイト

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.IO; 
using System.Net; 
using System.Text; 
using System.Web; 
using System.Xml; 
using System.Xml.XPath; 
public class Rpx 
{ 
    private string apiKey; 
    private string baseUrl; 
    public Rpx(string apiKey, string baseUrl) { 
     while (baseUrl.EndsWith("/")) 
      baseUrl = baseUrl.Substring(0, baseUrl.Length - 1); 
     this.apiKey = apiKey; 
     this.baseUrl = baseUrl; 
    } 
    public string getApiKey() { return apiKey; } 
    public string getBaseUrl() { return baseUrl; } 
    public XmlElement AuthInfo(string token) { 
     Dictionary<string,string> query = new Dictionary<string,string>(); 
     query.Add("token", token); 
     return ApiCall("auth_info", query); 
    } 
    public List<string> Mappings(string primaryKey) { 
     Dictionary<string,string> query = new Dictionary<string,string>(); 
     query.Add("primaryKey", primaryKey); 
     XmlElement rsp = ApiCall("mappings", query); 
     XmlElement oids = (XmlElement)rsp.FirstChild; 
     List<string> result = new List<string>(); 
     for (int i = 0; i < oids.ChildNodes.Count; i++) { 
      result.Add(oids.ChildNodes[i].InnerText); 
     } 
     return result; 
    } 
    public Dictionary<string,ArrayList> AllMappings() { 
     Dictionary<string,string> query = new Dictionary<string,string>(); 
     XmlElement rsp = ApiCall("all_mappings", query); 
     Dictionary<string,ArrayList> result = new Dictionary<string,ArrayList>(); 
     XPathNavigator nav = rsp.CreateNavigator(); 
     XPathNodeIterator mappings = (XPathNodeIterator) nav.Evaluate("/rsp/mappings/mapping"); 
     foreach (XPathNavigator m in mappings) { 
      string remote_key = GetContents("./primaryKey/text()", m); 
      XPathNodeIterator ident_nodes = (XPathNodeIterator) m.Evaluate("./identifiers/identifier"); 
      ArrayList identifiers = new ArrayList(); 
      foreach (XPathNavigator i in ident_nodes) { 
       identifiers.Add(i.ToString()); 
      } 
      result.Add(remote_key, identifiers); 
     } 
     return result; 
    } 
    private string GetContents(string xpath_expr, XPathNavigator nav) { 
     XPathNodeIterator rk_nodes = (XPathNodeIterator) nav.Evaluate(xpath_expr); 
     while (rk_nodes.MoveNext()) { 
      return rk_nodes.Current.ToString(); 
     } 
     return null; 
    } 
    public void Map(string identifier, string primaryKey) { 
     Dictionary<string,string> query = new Dictionary<string,string>(); 
     query.Add("identifier", identifier); 
     query.Add("primaryKey", primaryKey); 
     ApiCall("map", query); 
    } 
    public void Unmap(string identifier, string primaryKey) { 
     Dictionary<string,string> query = new Dictionary<string,string>(); 
     query.Add("identifier", identifier); 
     query.Add("primaryKey", primaryKey); 
     ApiCall("unmap", query); 
    } 
    private XmlElement ApiCall(string methodName, Dictionary<string,string> partialQuery) { 
     Dictionary<string,string> query = new Dictionary<string,string>(partialQuery); 
     query.Add("format", "xml"); 
     query.Add("apiKey", apiKey); 
     StringBuilder sb = new StringBuilder(); 
     foreach (KeyValuePair<string, string> e in query) { 
      if (sb.Length > 0) { 
       sb.Append('&'); 
      } 
      sb.Append(System.Web.HttpUtility.UrlEncode(e.Key, Encoding.UTF8)); 
      sb.Append('='); 
      sb.Append(HttpUtility.UrlEncode(e.Value, Encoding.UTF8)); 
     } 
     string data = sb.ToString(); 
     Uri url = new Uri(baseUrl + "/api/v2/" + methodName); 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     request.Method = "POST"; 
     request.ContentType = "application/x-www-form-urlencoded"; 
     request.ContentLength = data.Length; 
     // Write the request 
     StreamWriter stOut = new StreamWriter(request.GetRequestStream(), 
               Encoding.ASCII); 
     stOut.Write(data); 
     stOut.Close(); 
     HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
     Stream dataStream = response.GetResponseStream(); 
     XmlDocument doc = new XmlDocument(); 
     doc.PreserveWhitespace = false; 
     doc.Load(dataStream); 
     XmlElement resp = doc.DocumentElement; 
     if (resp == null || !resp.GetAttribute("stat").Equals("ok")) { 
      throw new Exception("Unexpected API error"); 
     } 
     return resp; 
    } 
    public static void Main(string[] args) { 
     Rpx r = new Rpx(args[0], args[1]); 
     if (args[2].Equals("mappings")) { 
      Console.WriteLine("Mappings for " + args[3] + ":"); 
      foreach(string s in r.Mappings(args[3])) { 
       Console.WriteLine(s); 
      } 
     } 
     if (args[2].Equals("all_mappings")) { 
      Console.WriteLine("All mappings:"); 
      foreach (KeyValuePair<string, ArrayList> pair in r.AllMappings()) { 
       Console.WriteLine(pair.Key + ":"); 
       foreach (string identifier in pair.Value) { 
        Console.WriteLine(" " + identifier); 
       } 
      } 
     } 
     if (args[2].Equals("map")) { 
      Console.WriteLine(args[3] + " mapped to " + args[4]); 
      r.Map(args[3], args[4]); 
     } 
     if (args[2].Equals("unmap")) { 
      Console.WriteLine(args[3] + " unmapped from " + args[4]); 
      r.Unmap(args[3], args[4]); 
     } 
    } 
} 

しかし、私は、C#のマスターないんだけど、APIKEYの値とtoken_urlをどこに置くか、私は理解することはできません:彼らは、C#のヘルパークラスに以下のものを提供してきました。また、ユーザーがサインアップに使用しているアカウントから派生したユーザー名を表示する方法をサインインした場合、GoogleまたはYahoo!例えば。 また、サインアウトオプションはありません。 Janrainの開発者の助けは何も役に立たないので、どんな助けも大歓迎です。

答えて

2

私はJanRainでこれを明確にしていないことに同意します。提供されているRpxヘルパーのサンプルコードを変更する必要はありません。以下は、MVCアプリケーションからRpxヘルパークラスを使用するコードです。 System.XmlとSystem.Xml.Linqを必ず含めてください。

var token = Request.Form["token"]; 
var rpx = new Helpers.Rpx("your-api-key-goes-here", "https://rpxnow.com"); 
var authInfo = rpx.AuthInfo(token); 
var doc = XDocument.Load(new XmlNodeReader(authInfo));     
ViewData["displayName"] = doc.Root.Descendants("displayName").First().Value; 
ViewData["identifier"] = doc.Root.Descendants("identifier").First().Value; 
関連する問題