Zugang JSON von innen asp.net WebMethod
-
30-09-2019 - |
Frage
habe ich ein System.Web.Services.WebService
mehrere WebMethods
enthält. Wenn eines dieser WebMethods
eine Ausnahme auslöst, möchte ich die Werte in diesem WebMethod weitergegeben loggt sein. Ich möchte dies in einer Art und Weise behandeln, die allgemein genug ist, dass ich die gleiche Methode verwenden kann, unabhängig von der Anzahl oder Art der Parameter. Ich dachte, ich würde das rohe JSON einzuloggen, aber ich bin nicht in der Lage zu bestimmen, wie es zuzugreifen. Ich habe die ganze Context.Request Objekt (einschließlich der InputStream
Eigenschaft) durchsucht, ohne es zu finden.
Hier ist, was würde ich tun:
[WebMethod(EnableSession = true)]
public IEnumerable MyWebMethod(int a, string b)
{
try
{
//do something
}
catch (Exception e)
{
LogException(e, this.Context);
throw;
}
}
//All WebMethods should be able to call LogExceoption regardless of param type/count
protected void LogException(Exception ex, HttpContext context)
{
string parameters = context.Request. //?? i don't know how to get to the JSON
//write exception detail to log
}
Ich bin mit C # mit .NET Framework 3.5
Lösung
Hier ist, wie die rohe JSON zuzugreifen:
protected void LogException(Exception ex, HttpContext context)
{
context.Request.InputStream.Position = 0;
string rawJson = null;
using (StreamReader reader = new StreamReader(context.Request.InputStream))
{
rawJson = reader.ReadToEnd();
}
//write exception detail to log
}
Andere Tipps
Siehe auch: http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension(VS.71).aspx
Siehe TraceExtension, im Beispiel. Es kümmert sich um alle Web-Methoden und protokolliert die Ergebnisse in einer Datei. Sollte einfach, dass auf Ihre Bedürfnisse anzupassen.