Доступ к сырому JSON изнутри asp.net WebMethod - PullRequest
2 голосов
/ 21 августа 2010

У меня есть System.Web.Services.WebService, содержащий несколько WebMethods.Если какой-либо из этих WebMethods вызывает исключение, я хочу записать значения, переданные этому WebMethod.Я хочу обработать это достаточно общим способом, чтобы я мог использовать один и тот же метод независимо от количества или типа параметров.Я думал, что я войду в сырой JSON, но я не могу определить, как получить к нему доступ.Я искал объект Context.Request (включая свойство InputStream), но не нашел его.

Вот что я хотел бы сделать:

[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
}

Я использую C # с.net Framework 3.5

Ответы [ 2 ]

3 голосов
/ 22 августа 2010

Вот как получить доступ к необработанному JSON:

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
}
0 голосов
/ 21 августа 2010

См .: http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapextension(VS.71).aspx

См. TraceExtension, в примере. Он обрабатывает все веб-методы и записывает результаты в файл. Должно быть легко адаптировать это к вашим потребностям.

...