С# веб-сайт asp.net, вызывающий webApi

Я столкнулся с проблемой из-за моей неопытности в управлении потоками. У меня есть это действие ниже:

 public static async Task<joueurs> loadjoueurs(int id)
        {
            joueurs EmpInfo = new joueurs();

            using (var client = new HttpClient())
            {
                //Passing service base url  
                client.BaseAddress = new Uri("http://www.myWebApi.fr/api/");

                client.DefaultRequestHeaders.Clear();
                //Define request data format  
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                //Sending request to find web api REST service resource GetAllEmployees using HttpClient  
                HttpResponseMessage Res = await client.GetAsync("joueurs?id=" + id);

                //Checking the response is successful or not which is sent using HttpClient  
                 if (Res.IsSuccessStatusCode)
                  {
                      //Storing the response details recieved from web api   
                      var EmpResponse = Res.Content.ReadAsStringAsync().Result;

                      //Deserializing the response recieved from web api and storing into the Employee list  
                       EmpInfo = JsonConvert.DeserializeObject<joueurs>(EmpResponse);
                      return EmpInfo;
                  }

                return null;
            }

это просто клиент, чтобы получить мои данные из webApi (без ssl без аутентификации, когда я проверяю его, я получаю правильные значения), но когда я делаю вызов, используя функцию выше (на моем веб-сайте asp.net) .... это застрять в HttpResponseMessage = await .... навсегда.

В моем webApi у меня есть две функции с одинаковым именем, но с разными параметрами.

 public async Task<IHttpActionResult> Getjoueur(int iduser, int idsport)

а также

 public async Task<IHttpActionResult> Getjoueur(int id)

Так что я не знаю, откуда проблема.

(продолжение) Вот место, где я вызываю Task :

public SuperModel(int id)
        {
            this.joueur =  Repojoueurs.loadjoueurs(id).Result;
       /*     this.classificationSport =  Repoclassificationsport.loadclassificationsport().Result;
             ...
       */
        }

И затем моя супермодель создается здесь, в моем домашнем контроллере:

public ActionResult Index(int id)
        {
            SuperModel superModel = new SuperModel(id);


            return View(superModel);
        }

person Rémi Duplan    schedule 09.08.2018    source источник
comment
Любая информация о том, как и где вы вызываете Task‹joueurs› loadjoueurs(int id)?   -  person Jeroen Heier    schedule 09.08.2018
comment
... и, видимо, используя Fiddler, я знаю, что мой webApi возвращает ожидаемые данные. Так что я не знаю, почему он держится здесь.   -  person Rémi Duplan    schedule 09.08.2018
comment
да, конечно, я вызываю метод в конструкторе «Myclass» (это модель, которую я передаю в мой возвращаемый вид («Myclass»)). ... в действии, которое возвращает View.   -  person Rémi Duplan    schedule 09.08.2018


Ответы (1)


Можете попробовать не использовать async и wait. Около трех изменений, как показано ниже

public static HttpResponseMessage loadjoueurs(int id)
    {

            HttpResponseMessage Res = client.GetAsync("joueurs?id=" + id);

return Request.CreateResponse(HttpStatusCode.OK,EmpInfo, "application/json");
     }
person M. Abouzeid    schedule 09.08.2018
comment
HttpClient предлагает только асинхронный метод... и, честно говоря, асинхронность очень важна для моего проекта. - person Rémi Duplan; 09.08.2018
comment
Салют ! я нашел его! вот решение: HttpResponseMessage Res = await client.GetAsync(joueurs?id= + id).ConfigureAwait(false); - person Rémi Duplan; 09.08.2018
comment
Рад, что вы его нашли. С другой стороны, вы правы, HttpClient предлагает только асинхронность, однако вы все равно можете вызывать его без ожидания. Удачи. - person M. Abouzeid; 09.08.2018