从asp.net WebMethod中访问原始JSON

时间:2010-08-20 20:26:52

标签: c# json web-services .net-3.5 webmethod

我的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
}

我正在使用带有.net Framework 3.5的C#

2 个答案:

答案 0 :(得分:3)

以下是访问原始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
}

答案 1 :(得分:0)

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

请参阅示例中的TraceExtension。它处理所有Web方法并将结果记录到文件中。应该直截了当地适应您的需求。