Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

472
Views
ExecuteAsync () causando un bloqueo fuerte sin excepción

Aquí está la pregunta: ¿Qué impediría que este código ejecute esta solicitud http?

Aquí está la configuración: estoy haciendo un proyecto que tiene varias API, y este es un método que se llama del primero al segundo para obtener información de validación. El método, en teoría, debería realizar la solicitud, enviar el modelo al segundo servicio y regresar con algo que se devuelve al final de este método.

Cuando se ejecutan ambas API localmente con puntos de interrupción para ver si están siendo atacadas, la segunda nunca es atacada, porque en el momento en que se golpea la línea ExecuteAsync(), se bloquea y luego reinicia la primera API. No creo que haya hecho nada malo aquí, pero no hay ningún tipo de seguimiento de pila o excepción que me arroje, incluso si lo puse en un intento/captura. ¿Es este un problema conocido o simplemente estoy haciendo algo mal aquí?

 public async Task<SharkTankValidationResponseModel> CheckIfValidRequest(SharkTankValidationModel requestModel) { // Setup rest client RestClient userRestClient = new RestClient(endpoint + "SharkTank/Validate"); RestRequest userRequest = new RestRequest(Method.POST); // New request object for body userRequest.AddJsonBody(requestModel); // HTTP Request IRestResponse response = await userRestClient.ExecuteAsync(userRequest); return JsonConvert.DeserializeObject<SharkTankValidationResponseModel>(response.Content); }

En el nivel superior, así es como se llama. El modelo se está haciendo correctamente sin problemas, y puedo recorrer el código hasta la función de ejecución antes de que se bloquee.

 SharkTankValidationModel model = await makeSharkTankValidationModel(Method.GET, SharkTankConstants.GET_ALL_CLIENT_CATEGORY, null); SharkTankValidationResponseModel validationModel = await sharkTank.CheckIfValidRequest(model);

Gif para referencia de los pasos que se ejecutan a través del depurador y el bloqueo repentino https://imgur.com/bWSR78h

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Muy bien, lo descubrí después de intentarlo finalmente de una manera que me permitió ver una excepción en una respuesta. El error fue el siguiente:

 ActualMessage: "A possible object cycle was detected. This can either be due to a cycle or if the object depth is larger than the maximum allowed depth of 64. Consider using ReferenceHandler.Preserve on JsonSerializerOptions to support cycles." BytePositionInLine: null ClassName: "System.Text.Json.JsonException" Data: null ExceptionMethod: null HResult: -2146233088 HelpURL: null InnerException: null LineNumber: null Message: "A possible object cycle was detected. This can either be due to a cycle or if the object depth is larger than the maximum allowed depth of 64. Consider using ReferenceHandler.Preserve on JsonSerializerOptions to support cycles." Path: "$.requestorRoles.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.Claims.Subject.AuthenticationType" RemoteStackIndex: 0 RemoteStackTraceString: null Source: "System.Text.Json" StackTraceString: " at System.Text.Json.ThrowHelper.ThrowJsonExcep WatsonBuckets: null

Ahora, el objeto que estaba usando para un modelo estaba usando los tipos de objetos de reclamos predeterminados de Microsoft para pasar los reclamos. Aparentemente, esto hizo que el serializador json se asuste y se repita una y otra vez, y simplemente se bloquee cuando encontró un bucle.

La solución fue simplemente crear un tipo de objeto personalizado para asignar esos reclamos y, literalmente, no hubo problemas al usar ninguno de los 3 tipos de llamadas de métodos HTTP diferentes. Para resumir, no use el tipo de reclamo predeterminado para las cosas. Solo crea problemas.

over 4 years ago · Santiago Trujillo Report

0

Según la documentación de RestClient, ExecuteAsync no genera una excepción, sino que completa response.ErrorException y response.ErrorMessage si response.IsSuccessful es false . Si no necesita acceder al código de estado de respuesta y solo se preocupa por el cuerpo, simplemente use PostAsync<T> en su lugar.

 public async Task<SharkTankValidationResponseModel> CheckIfValidRequest(SharkTankValidationModel requestModel) { // Setup rest client RestClient userRestClient = new RestClient(endpoint); RestRequest userRequest = new RestRequest("SharkTank/Validate") .AddJsonBody(requestModel); // HTTP Request IRestResponse response = await userRestClient.PostAsync<SharkTankValidationResponseModel>(userRequest); return response; }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!