2

我订阅了一个群发电子邮件服务,当他们最后发生错误时,它会发布到我网站上的一个页面作为端点,以通知我一封电子邮件已退回。

他们描述如下: The event data is sent in the POST request body using a JSON object.

我需要知道的是如何捕获发布给我的信息?目前我将它们指向一个通用处理程序,一个 .ashx 页面,只要它在 .NET 中,它就可以更改为任何内容。

在使用第一个经典 ASP 和现在的 .NET 的 10 年中,我以前从未这样做过,我必须承认我什至不知道从哪里开始。

4

4 回答 4

5

这是我用来实现类似事情的代码 - 不知道我最初是从哪里得到的。

C#

var strJSON = String.Empty;

context.Request.InputStream.Position = 0;
using (var inputStream = new StreamReader(context.Request.InputStream))
{
  strJSON = inputStream.ReadToEnd();
}

JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();
object serJsonDetails = javaScriptSerializer.Deserialize(strJSON, typeof(object));

// go and process the serJsonDetails object

或 VB

Dim strJSON = [String].Empty

context.Request.InputStream.Position = 0
Using inputStream = New StreamReader(context.Request.InputStream)
    strJSON = inputStream.ReadToEnd()
End Using

Dim javaScriptSerializer As New JavaScriptSerializer()
Dim serJsonDetails As Object = javaScriptSerializer.Deserialize(strJSON, GetType(Object))

' go and process the serJsonDetails object
于 2014-10-31T05:04:04.020 回答
1

您可以只读取请求流 ( Request.GetRequestStream) 并使用 Json.NET 反序列化为对象。

您可以使用 MVC4 和内置的对象映射。

有很多选择。也许您应该更多地阅读它们,以便了解它们的功能和缺点。

于 2013-03-22T19:18:16.770 回答
0

如果您知道帖子的内容,可能 Request.Form (此处)将帮助您获取 JSON,然后您需要类似 json.net 库的东西来获取对象,或者您可以简单地使用正则表达式或关键字搜索字符串

或者,如果您可以将帖子定向到 Web 服务(asmx)而不是网页,这些服务将为您解析 json

于 2013-03-22T19:17:43.823 回答
0

如果您需要两次或多次读取原始帖子数据,我建议您使用此代码。

    string postBodyJson = null;

    MemoryStream ms = new MemoryStream();
    Request.InputStream.Position = 0;
    Request.InputStream.Seek(0, SeekOrigin.Begin);
    Request.InputStream.CopyTo(ms);

    ms.Position = 0;
    ms.Seek(0, SeekOrigin.Begin);
    using (var reader = new StreamReader(ms))
    {
        postBodyJson = reader.ReadToEnd();
    }
于 2018-03-22T05:54:41.690 回答