Используя HttpClient
, вам не нужно сериализовать свой объект в Json перед отправкой его в Web Api. HttpClient
позаботится о сериализации для вас.
Редактировать (убран предыдущий код, который явно не работал)
Вместо отправки Json в PostAsJsonAsync
, просто отправьте объект.
driverDayLogModel driverDayLog = new driverDayLogModel
{
driverId = Convert.ToInt32(txtId.Text),
dayStartTime = DateTime.Now,
};
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://127.0.0.1:54314/");
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// simply put the object as the second parameter instead of a Json string
var response = client.PostAsJsonAsync("api/driverdaylogs", driverDayLog).Result;
if (response.IsSuccessStatusCode)
{
// Some Stuff
}
else
{
MessageBox.Show("Error Code" +
response.StatusCode + " : Message - " + response.ReasonPhrase);
}
}
В качестве примечания: использование .Result
заблокирует ваш код, поэтому рекомендуемый способ - использовать await
и async
, но это выходит за рамки этого вопроса / ответа.
Принятие простой реализации события (использующий + = и - = на поле делегата, которое в свою очередь будет использовать Delegate.Combine/Remove
) затем да, обработчики событий назовут в порядке, в котором они подписаны. Гарантия эффективно дана в Delegate.Combine
документация:
Возвращаемое значение
А новая многоадресная передача (объединяемый) делегат со списком вызова, который связывает списки вызова и b в том порядке.
Видят мой статья о событиях для некоторых примеров, из которых Delegate.Combine/Remove
делают (и на что события похожи под покрытиями).
Делают НЕ , полагаются на событие, заказывая . Все отправки события должны быть логически независимыми, как будто они происходили параллельно.
добавление обработчиков событий в других классах и потоках может нарушить Ваше принятое упорядочивание, это - просто не безопасное предположение для создания, и оно идет вразрез с понятием событий как независимые отделенные действия.
я буду идти один шаг вперед и утверждать, что, если необходимо принять порядок на увольнение событий, Вы имеете серьезный недостаток дизайна и/или неправильно используете события.
У Вас мог бы быть один обработчик событий, который вызывает другие функции или делегирует в указанном порядке.
Я рекомендовал бы "перенести его".
Делают что-то вроде этого...
MyObject.MyEvent += new MyEventHandler(Wrapper);
public void Wrapper()
{
Method1();
Method3();
Method2();
}
Тот способ, которым Вы все еще сцепляете событие, но имеете полный контроль над тем, что называют.
Приносим извинения за поздний ответ.
Я столкнулся с ситуацией, когда мне приходится иметь дело с порядком обработки событий.
У меня есть форма, и когда я нажимаю кнопку на форме, объект добавляется в коллекцию где-то в моем коде.
В коллекции есть событие «Добавлено», и к нему подключились два делегата. Один из методов удаляет любой элемент, только что добавленный в коллекцию, а другой показывает сообщение для пользователя.
Если у меня есть какой-то код, показанный здесь, при срабатывании события будет выдано исключение «IndexOutOfRange»:
// this methods hooks two delegates to MyCollection.Added event, but the order results in a "IndexOutOfRange" exception after the event is triggered
HookEvents()
{
MyCollection.Added += new CollectionItemAddedHandler(DeleteItem_After_CollectionItemAdded);
MyCollection.Added += new CollectionItemAddedHandler(ShowMessage_After_CollectionItemAdded);
}
// when user click a button on form, add a object to MyCollection
Button_Clicked()
{
MyCollection.Add(new object());
}
// at the moment a object is added into the collection, this method remove it
DeleteItem_After_CollectionItemAdded(NewIndexArgs e)
{
MyCollection.Remove(e.NewIndex); // e.NewIndex represents the newly added item index in current collection
}
// at the moment a object is added into the collection, this method show its information (hey, but remember, I just remove it in the previous method)
ShowMessage_After_CollectionItemAdded(NewIndexArgs e)
{
MessageBox.Show(MyCollection[e.NewIndex]); // tell user what is just added into the current collection
// a "IndexOutOfRange" exception is thrown here....
}
Что заставит этот сценарий работать правильно , так это то, что метод «ShowMessage_After_CollectionItemAdded» должен быть запущен сначала , а затем это будет метод «DeleteItem_After_CollectionAdded».
Хотя мы можем + = сначала метод "ShowMessage ...", иногда мы не можем предопределить эту последовательность до времени выполнения .