Я работаю над приложением, которое будет использовать мой собственный REST endpoints
(у меня есть проект onw WebApi
).Теперь я пытаюсь создать приложение, которое будет работать на этой конечной точке.
Основываясь на этом руководстве по MSDN, я делаю что-то вроде этого:
Для тестирования я создаю приложение Console Core.Основной класс выглядит так:
class Program
{
public static HttpDataService http = new HttpDataService("authorization token here");
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
RunAsync().GetAwaiter().GetResult();
}
static async Task RunAsync()
{
var data = await http.Get("Default");
}
}
Мой основной класс Http
выглядит следующим образом:
public class HttpDataService
{
public HttpDataService(string token)
{
this.HttpClient = new HttpClient();
this.HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
}
private HttpClient HttpClient { get; set; }
public async Task<object> Get(string controller)
{
object data;
HttpResponseMessage response = await this.HttpClient.GetAsync(UrlService.BuildEndpoint(controller));
if (response.IsSuccessStatusCode)
{
data = await response.Content.ReadAsAsync<object>();
return data;
}
else
{
throw new Exception(); //todo
}
}
}
Мне не понравился дополнительный шаг, который мне нужен, чтобы сделать метод для запуска задачи (RunAsync.GetAwaiter...
в методе Main).
Есть ли более простой способ использования моих конечных точек?Может быть, какая-нибудь другая библиотека, которой не нужен дополнительный метод (таким образом, static Async Task Run
)?Есть ли способ просто вызвать метод, как:
http.Get("Projects");
Без RunAsync()
метод, который я пишу раньше?
PS.это консольное приложение работает нормально (я получаю значения из Default
контроллера из моего проекта WebApi)
РЕДАКТИРОВАТЬ
Этот способ выглядит более удобным для пользователя:
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
Task get = http.Get("default");
RunAsync(get).GetAwaiter().GetResult();
}
static async Task RunAsync(Task endpoint)
{
await endpoint;
}
но как получить это от endpoint
?