try net httpresponseexception handling exceptions exceptionfilterattribute errors error catch asp asp.net-web-api asp.net-web-api2

asp.net web api - net - Hacer referencia a los parámetros de acción de ExceptionLogger



web api exceptionfilterattribute (2)

Ok, parece que puedo obtener el texto del cuerpo de HttpContext leyendo InputStream en el objeto Request como este:

string bodyText = string.Empty; using (var sr = new StreamReader(HttpContext.Current.Request.InputStream)) { sr.BaseStream.Seek(0, SeekOrigin.Begin); bodyText = sr.ReadToEnd(); }

Este código me ha resultado exitoso hasta ahora para obtener mis datos json publicados.

Deseo utilizar el nuevo método para errores de registro global. Escribí una clase que hereda ExceptionLogger y anula el método Log() . Luego lo registró como reemplazo.

public class TraceExceptionLogger : ExceptionLogger { public async override void Log(ExceptionLoggerContext context) { // This is always empty string var content = await context.Request.Content.ReadAsStringAsync(); // This is almost always null var actionContext = context.ExceptionContext.ActionContext; } }

Puedo profundizar en las propiedades del objeto ExceptionLoggerContext para obtener casi todo lo que necesito, EXCEPTO para los parámetros de acción. De hecho, hay una propiedad ActionContext pero solo la he visto nula y esta página wiki indica que ActionContext y ControllerContext casi siempre serán nulos.

Además, no puedo obtener la secuencia de contenido porque la transmisión ya se ha leído antes de que llegue a mi registrador. Así que no hay forma de que obtenga ningún json publicado del contenido de la solicitud.

¿Hay alguna forma de obtener los datos publicados de HttpContext.Current o de alguna otra manera?


Aquí hay parámetros de acción para futuras referencias

public class HomeController : ApiController { public string Get(string id, [FromHeader] Whoever whoever) { public string Post(Whatever whatever) { var args = ((ApiController) context.ExceptionContext .ControllerContext.Controller)).ActionContext.ActionArguments if (args.ContainsKey("whatever")) { var whatever = (Whatever)args["whatever"];