Während die preisgekrönte Antwort auf ReadAsStringAsync bezog, hatte die Antwort kein Beispiel. Ich folgte dem Rat von gdp und leitete ein etwas funktionierendes Beispiel ...
Ich schuf eine einzelne Klasse namens MessageInterceptor. Ich habe nicht mehr getan, als von ActionFilterAttribute abzuleiten, und es fing sofort an, webAPI-Methodenaufrufe abzufangen, bevor der Controller es erhielt und nachdem der Controller fertig war. Hier ist meine letzte Klasse. In diesem Beispiel wird der XML-Serializer verwendet, um die Anforderung und die Antwort in einer XML-Zeichenfolge abzurufen. In diesem Beispiel werden die Anforderung und die Antwort als befüllte Objekte gefunden. Dies bedeutet, dass die Deserialisierung bereits erfolgt ist. Das Sammeln der Daten aus einem aufgefüllten Modell und das Serialisieren in eine XML-Zeichenfolge ist eine Darstellung der Anfrage und Antwort - nicht der tatsächlichen Postanforderung und Antwort, die von IIS zurückgeschickt wird.
Codebeispiel - MessageInterceptor
using System.IO;
using System.Linq;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;
using System.Xml.Serialization;
namespace webapi_test
{
public class MessageInterceptor : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
base.OnActionExecuting(actionContext);
var headers = actionContext.Request.Content.Headers.ToString();
var request = actionContext.ActionArguments.FirstOrDefault().Value;
var xml = SerializeXMLSerializer(request, "");
}
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
base.OnActionExecuted(actionExecutedContext);
var headers = actionExecutedContext.Response.Content.Headers.ToString();
var response = actionExecutedContext.Response.Content.ReadAsStringAsync().Result;
var xml = SerializeXMLSerializer(response, "");
}
public static string SerializeXMLSerializer(object o, string nameSpace)
{
string serializedValue;
var writer = new StringWriter();
XmlSerializer serializer = new XmlSerializer(o.GetType(), nameSpace);
serializer.Serialize(writer, o);
serializedValue = writer.ToString();
return serializedValue;
}
}
}
einige Teile Code. Verwenden Sie eine Beta-Version oder eine Quellcode-Version? Für mich geht das. – Aliostad
@Aliostad Hallo ich benutze die Beta-Version. Was benutzt du? – gdp
Ich benutze die gleiche, Beta-Version. – Aliostad