Эквивалент кода Python в C #? - PullRequest
1 голос
/ 21 марта 2012

Мне нужно задать этот вопрос, потому что я не знаю Python.Ниже приведены несколько строк, взятых из этого места.Буду признателен, если кто-нибудь поможет мне перевести следующее на C #

#Step 1: Get a session key
servercontent = myhttp.request(baseurl + '/services/auth/login', 'POST',
                            headers={}, body=urllib.urlencode({'username':username, 'password':password}))[1]
sessionkey = minidom.parseString(servercontent).getElementsByTagName('sessionKey')[0].childNodes[0].nodeValue
print "====>sessionkey:  %s  <====" % sessionkey

Ответы [ 2 ]

5 голосов
/ 21 марта 2012

Я не могу перевести его на C #, но могу объяснить, что делает этот код:

  1. Войдите в систему baseurl + '/services/auth/login', используя предоставленные имя пользователя и пароль.
  2. Прочитайтесодержимое этого URL.
  3. Анализирует содержимое первого тега <sessionkey> и считывает значение его первого дочернего узла.
2 голосов
/ 21 марта 2012

Вот быстрый и грязный перевод:

using System.Linq.Xml;
using System.Net;
using System.Collections.Generic;
using System.Web;

// ...
var client = new WebClient();
var parameters = new Dictionary<string, string> 
{ 
  { "username", username },
  { "password", password }
};

var result = client.UploadString(String.Format("{0}/services/auth/login", BaseUrl), UrlEncode(parameters));
var doc = XDocument.Load(result);  // load response into XML document (LINQ)
var key = doc.Elements("sessionKey").Single().Value // get the one-and-only <sessionKey> element.
Console.WriteLine("====>sessionkey:  {0}  <====", key);
// ...

// Utility function: 
private static string UrlEncode(IDictionary<string, string> parameters)
{
  var sb = new StringBuilder();
  foreach(var val in parameters) 
  {
    // add each parameter to the query string, url-encoding the value.
    sb.AppendFormat("{0}={1}&", val.Key, HttpUtility.UrlEncode(val.Value));
  }
  sb.Remove(sb.Length - 1, 1); // remove last '&'
  return sb.ToString();
}

Этот код проверяет, что ответ имеет только один элемент sessionKey, в противном случае он выдаст исключение, если существует 0 или больше 1. Затем он выводит его.

...