以下是使用 C# .NET 制作 AS2 服务器以接收 AS2 消息的示例代码。
首先,我们需要创建一个 Web API 项目,并在其中添加以下所需 NuGet 包:BouncyCastle.Crypto.dll 和 zlib.net。
接下来,我们将添加 AS2 接收器控制器,如下所示:
using System;
using System.IO;
using System.Net;
using System.Net.Http;
using System.Security.Cryptography.Pkcs;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Web.Http;
using Ionic.Zlib;
using Microsoft.Exchange.WebServices.Data;
namespace AS2Server.Controllers
{
public class As2ReceiverController : ApiController
{
[AllowAnonymous]
[HttpPost]
public HttpResponseMessage Receive()
{
HttpResponseMessage responseMessage;
try
{
// 获取 AS2 头信息
var request = HttpContext.Current.Request;
var headers = request.Headers;
// 获取请求主体
var inputStream = request.InputStream;
var bodyBuffer = new byte[inputStream.Length];
inputStream.Read(bodyBuffer, 0, bodyBuffer.Length);
// 获取请求正文的 MIME 类型和字符集
var contentType = headers["Content-Type"].Split(';')[0].Trim();
var charset = Encoding.UTF8;
if (headers["Content-Transfer-Encoding"] == "deflate")
{
// 解压请求主体
var bodyStream = new MemoryStream(bodyBuffer);
using (var zlibStream = new ZlibStream(bodyStream, CompressionMode.Decompress))
{
using (var output = new MemoryStream())
{
zlibStream.CopyTo(output);
bodyBuffer = output.ToArray();
}
}
}
// 获取 MDN 请求返回 URL
string returnURL = "";
if (headers["Disposition-Notification-To"] != null)
{
returnURL = headers["Disposition-Notification-To"].Split(';')[1].Trim();
}
// 解码主体并从消息中移除签名
var signedCms = new SignedCms();
signedCms.Decode(bodyBuffer);
//