Основная проблема с кодом, показанным OP, заключается в том, что i
никогда не читается до второго цикла. Чтобы продемонстрировать, представьте, что вы видите ошибку внутри кода
funcs[i] = function() { // and store them in funcs
throw new Error("test");
console.log("My value: " + i); // each should log its value.
};
Ошибка на самом деле не происходит до тех пор, пока funcs[someIndex]
не будет выполнен ()
. Используя эту же логику, должно быть очевидно, что значение i
также не будет собрано до этой точки. Как только исходный цикл завершится, i++
добавит i
к значению 3
, что приведет к сбою условия i < 3
и завершению цикла. На этом этапе i
является 3
, поэтому, когда используется funcs[someIndex]()
, и i
оценивается, он равен 3 - каждый раз.
Чтобы пройти мимо этого, вы должны оценить i
, поскольку он встречается. Обратите внимание, что это уже произошло в форме funcs[i]
(где есть 3 уникальных индекса). Существует несколько способов захвата этого значения. Один из них - передать его в качестве параметра функции, которая уже несколько раз показана здесь.
Другой вариант - построить объект функции, который сможет закрыть эту переменную. Это может быть выполнено таким образом
funcs[i] = new function() {
var closedVariable = i;
return function(){
console.log("My value: " + closedVariable);
};
};
Вы должны добавить ссылку на пакет «Microsoft.AspNet.WebApi.Client» (прочтите эту статью для образцов).
Без дополнительного расширения вы можете использовать стандартный метод PostAsync
:
client.PostAsync(uri, new StringContent(jsonInString, Encoding.UTF8, "application/json"));
, где значение jsonInString
вы можете получить, вызвав JsonConvert.SerializeObject(<your object>);
Я использую этот класс:
public class JsonContent : StringContent
{
public JsonContent(object obj) :
base(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json")
{ }
}
Пример использования:
new HttpClient().PostAsync("http://...", new JsonContent(new { x = 1, y = 2 }));
Я бы добавил к принятому ответу, что вы также захотите добавить заголовок Accept
в httpClient
:
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
Вы можете использовать IEnterprise.Easy-HTTP , поскольку он имеет встроенный синтаксический анализ:
await new RequestBuilder<ExampleObject>()
.SetHost("https://httpbin.org")
.SetContentType(ContentType.Application_Json)
.SetType(RequestType.Post)
.SetModelToSerialize(dto)
.Build()
.Execute();