Вы можете написать следующий код:
string url = currentURL + "resources/" + ResourceID + "/accounts?AUTHTOKEN=" + pmtoken;
using (HttpClient client = new HttpClient())
{
using (HttpResponseMessage response = client.GetAsync(url).Result)
{
using (HttpContent content = response.Content)
{
var json = content.ReadAsStringAsync().Result;
}
}
}
Обновить 1:
, если вы хотите заменить вызов на Result
с помощью ключевого слова await
, тогда это возможно, но вы должны поместить этот код в метод, который помечается как async
как следующий
public async Task AsyncMethod()
{
string url = currentURL + "resources/" + ResourceID + "/accounts?AUTHTOKEN=" + pmtoken;
using (HttpClient client = new HttpClient())
{
using (HttpResponseMessage response = await client.GetAsync(url))
{
using (HttpContent content = response.Content)
{
var json = await content.ReadAsStringAsync();
}
}
}
}
, если вы пропустили ключевое слово async
из метода, вы можете получить время компиляции как следующий
Оператор «ожидание» может использоваться только в асинхронном методе. Рассмотрим маркировку этого метода с помощью модификатора «async» и изменив его тип возврата на «Задача».
blockquote>Обновление 2:
Отвечая на ваш первоначальный вопрос о преобразовании ' WebClient 'to' WebRequest '- это код, который вы могли бы использовать ... Но Microsoft (и я) рекомендовал вам использовать первый подход (используя HttpClient).
string url = currentURL + "resources/" + ResourceID + "/accounts?AUTHTOKEN=" + pmtoken; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.Method = "GET"; using (WebResponse response = httpWebRequest.GetResponse()) { HttpWebResponse httpResponse = response as HttpWebResponse; using (StreamReader reader = new StreamReader(httpResponse.GetResponseStream())) { var json = reader.ReadToEnd(); } }
Обновление 3
Чтобы узнать, почему
HttpClient
более рекомендуется, чемWebRequest
иWebClient
, вы можете обратиться к следующим ссылкам.Нужна помощь в решении между HttpClient и WebClient
http://www.diogonunes.com/blog/webclient-vs-httpclient-vs-httpwebrequest/ ]
Какая разница между классами WebClient и HTTPWebRequest в .NET?
http://blogs.msdn.com/b/henrikn/archive/2012/02/11/httpclient-is-here.aspx
Необходимо вызвать конструктора базового класса до тела конструктора производного класса.
class Derived : Base
{
public Derived(string someParams)
: base("Blah " + someParams)
{
}
}
Вы не можете. Можно назвать его прежде:
public Derived() : base()
или необходимо использовать рычаг
class Base
{
protected void init() { }
public Base(string sMessage)
{
init();
}
}
class Derived : Base
{
public Derived(string someParams)
{
string sMessage = "Blah " + someParams;
init();
}
}
Точки, которые будут отмечены на конструкторах:
В · Конструкторы не могут быть "виртуальными".
В · Они не могут быть наследованы.
В · Конструкторов вызывают в порядке наследования.
public Child(string a):base(a){}
Если Вы действительно должны сделать, чтобы Ваш конструктор работал сначала, то я предлагаю использовать защищенный, Инициализируют метод, который вызывается Вашими конструкторами и делает фактическую работу инициализации класса. Необходимо предоставить альтернативному конструктору, который позволит инициализации быть пропущенной.
public class Base
{
public Base() : this(true) { }
protected Base(bool runInitializer)
{
if (runInitializer)
{
this.Initialize();
}
}
protected void Initialize()
{
...initialize...
}
}
public class Derived : Base
{
// explicitly referencing the base constructor keeps
// the default one from being invoked.
public Derived() : base(false)
{
...derived code
this.Initialize();
}
}
public Derived(string someParams) : base(someParams)
{
string sMessage = "Blah " + someParams;
}
Это - способ, которым необходимо сделать это. Вы могли, возможно, поместить код, который Вы хотите назвать впоследствии в защищенном методе в базовом классе, и затем Вы могли назвать его впоследствии как это:
class Base
{
public Base(string sMessage)
{
ConstructorStuff();
}
protected Base()
{
}
protected void ConstructorStuff()
{
}
}
class Derived : Base
{
public Derived(string someParams)
{
string sMessage = "Blah " + someParams;
ConstructorStuff();
}
}
На самом деле простое решение:
class Base
{
public Base(string sMessage)
{
//Do stuff
}
}
class Derived : Base
{
public Derived(string someParams)
: base("Blah " + someParams)
{
}
}
, Почему делают это более сложным?
Изначально я пропустил комментарий OregonGhost об использовании статического метода для изменения параметра, который оказался для меня наиболее полезным, поэтому я решил добавить образец кода для тех, кто читает эта ветка:
class Base
{
public Base( string sMessage )
{
// Do stuff
}
}
class Derived : Base
{
public Derived( string sMessage ) : base( AdjustParams( sMessage ) )
{
}
static string AdjustParams( string sMessage )
{
return "Blah " + sMessage;
}
}