Cómo obtener solicitud y respuesta de una API web y guardarla en la base de datos.
Tengo un método en la clase Controller a continuación:
[HttpGet]
[ResponseType(typeof(RsContractCustomer))]
[Route("api/Contract/GetCustomerData/{cardModificationId}")]
public async Task<IHttpActionResult> GetCustomerData([FromUri] int cardModificationId)
{
var jsonIgnoreNullValues = JsonConvert.SerializeObject(await _bs.GetCustomer(cardModificationId), Newtonsoft.Json.Formatting.Indented, new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
});
JObject jObject = JObject.Parse(jsonIgnoreNullValues);
return Ok(jObject); //await _bs.GetCustomerData(id));
}
Ahora quiero obtener HttpResponseMessage
y guardar una parte particular en la base de datos. ¿Qué debo agregar en este código o implementar Middleware para hacerlo?
davy.ai
Para guardar una parte particular del
HttpResponseMessage
en la base de datos, puedes modificar el métodoGetCustomerData
existente de las siguientes formas:Task<ihttpactionresult>
aTask<httpresponsemessage>
, ya que deseas devolver unHttpResponseMessage
en lugar de unIHttpActionResult
.Crea una nueva instancia de
HttpResponseMessage
que será devuelta por el método. Puedes usar la propiedadContent
para establecer el contenido del mensaje de respuesta, que puede ser una cadena, un objeto JSON o cualquier otro contenido HTTP válido.Usa la instancia de
JObject
jObject
para extraer la parte particular de la respuesta que deseas guardar en la base de datos.Guarda los datos extraídos en la base de datos utilizando tu tecnología de acceso a base de datos preferida.
A continuación se muestra el código modificado:
Alternativamente, puedes crear un middleware que intercepta la respuesta antes de que se envíe al cliente, extraer los datos particulares que deseas guardar y luego guardarlos en la base de datos. Para hacer esto, deberías crear una clase que implemente la interfaz
IMiddleware
y sobrescriba el métodoInvokeAsync
. En el métodoInvokeAsync
, puedes acceder al contenido de la respuesta, extraer la parte particular que deseas guardar y luego guardarla en la base de datos.Aquí hay un ejemplo de una clase de middleware que extrae y guarda el contenido de la respuesta:
Para usar el middleware, debes registrarlo en la canalización de solicitud de la aplicación en el método
Configure
de la claseStartup
:“`
public void Configure(IApplicationBuilder app)
{
// otras registraciones de middleware
}
“`