#c# #asp.net #rest #asp.net-web-api
#c# #asp.net #отдых #asp.net-web-api
Вопрос:
Я пытаюсь вызвать webapi из консольного приложения (которое запускается планировщиком задач Windows). Я не хочу, чтобы мое консольное приложение ожидало результата от api.Я просто хочу вызвать api, инициировать его и выйти из консольного приложения.
Мой код консольного приложения
public static void InvokeSisService(string feature)
{
var serviceurl = ConfigurationManager.AppSettings["AppServiceURL"];
var controllerPath= ConfigurationManager.AppSettings["ControllerPath"];
var client = new HttpClient { BaseAddress = new Uri(serviceurl) };
controllerPath= controllerPath "?feature=" feature;
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
//client.PostAsync(smsservicepath, null);
// var temp=client.GetAsync(smsservicepath).Resu<
var response = Task.Run(() => client.GetAsync(controllerPath)).Resu<
}
Мой webapi вызывается, но он ожидал вывода.Как мне выйти из консольного приложения после вызова api.
Код Webapi
[HttpGet]
[Route("ProcessService")]
public HttpResponseMessage ProcessService([FromUri] string feature)
{
}
Комментарии:
1. Вы можете прочитать эту статью blog.stephencleary.com/2014/06/fire-and-forget-on-asp-net.html от Стивена Клири
2. Хорошая статья, но речь идет о запуске и забывании с сервера, а не с клиента.
Ответ №1:
Я уверен, что вы хотите убедиться, что ответ был получен, поэтому измените
var response = Task.Run(() => client.GetAsync(controllerPath)).Resu<
Для:
using (var response = await client.GetAsync(controllerPath, HttpCompletionOption.ResponseHeadersRead))
Это будет удалено после получения заголовков ответа. Это НЕ включает обработку ошибок — вероятно, вам следует добавить обработку ошибок в микс, чтобы убедиться, что вы получаете правильный код ответа, прежде чем двигаться дальше — но это зависит от вас.
Комментарии:
1. К вашему сведению, я не хочу перехватывать ответ от API … я хочу просто вызвать и выйти из своей программы.
2. Затем выньте await и исчезните!
Ответ №2:
var response = Task.Run(() => клиент.GetAsync(controllerPath)).Результат;
с помощью свойства «Result» вы ожидаете ответа.