96 lines
3.4 KiB
C#
96 lines
3.4 KiB
C#
using Hncore.Infrastructure.Common;
|
||
using Microsoft.Extensions.DependencyInjection;
|
||
using System;
|
||
using System.IO;
|
||
using System.Xml;
|
||
using System.Xml.Linq;
|
||
|
||
namespace Hncore.Wx.Open
|
||
{
|
||
/// <summary>
|
||
/// RequestMessage工厂
|
||
/// </summary>
|
||
public static class MessageFactory
|
||
{
|
||
|
||
public static IServiceCollection Service { get; set; }
|
||
/// <summary>
|
||
/// 获取XDocument转换后的IRequestMessageBase实例。
|
||
/// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public static IMessageBase GetRequestEntity(XDocument doc)
|
||
{
|
||
IMessageBase requestMessage = null;
|
||
RequestInfoType infoType;
|
||
|
||
try
|
||
{
|
||
infoType = InfoTypeHelper.GetRequestInfoType(doc);
|
||
switch (infoType)
|
||
{
|
||
case RequestInfoType.component_verify_ticket:
|
||
requestMessage = new MessageComponentVerifyTicket(doc);
|
||
break;
|
||
case RequestInfoType.unauthorized:
|
||
requestMessage = new MessageUnauthorized(doc);
|
||
break;
|
||
case RequestInfoType.authorized:
|
||
requestMessage = new MessageAuthorized(doc);
|
||
break;
|
||
case RequestInfoType.updateauthorized:
|
||
requestMessage = new MessageUpdateAuthorized(doc);
|
||
break;
|
||
case RequestInfoType.notify_third_fasteregister:
|
||
requestMessage = new MessageThirdFasteRegister(doc);
|
||
break;
|
||
case RequestInfoType.event_subscribe_qrscene:
|
||
requestMessage = new MessageEventSubscribeQrscene(doc);
|
||
break;
|
||
case RequestInfoType.event_SCAN:
|
||
requestMessage = new MessageEventScan(doc);
|
||
break;
|
||
case RequestInfoType.event_subscribe:
|
||
requestMessage = new MessageEventSubscribe(doc);
|
||
break;
|
||
default:
|
||
return new MessageDefault();
|
||
}
|
||
}
|
||
catch (Exception ex)
|
||
{
|
||
LogHelper.Error("MessageFactory 解析失败", ex.Message);
|
||
}
|
||
return requestMessage;
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 获取XDocument转换后的IRequestMessageBase实例。
|
||
/// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常
|
||
/// </summary>
|
||
/// <returns></returns>
|
||
public static IMessageBase GetRequestEntity(string xml)
|
||
{
|
||
return GetRequestEntity(XDocument.Parse(xml));
|
||
}
|
||
|
||
|
||
/// <summary>
|
||
/// 获取XDocument转换后的IRequestMessageBase实例。
|
||
/// 如果MsgType不存在,抛出UnknownRequestMsgTypeException异常
|
||
/// </summary>
|
||
/// <param name="stream">如Request.InputStream</param>
|
||
/// <returns></returns>
|
||
public static IMessageBase GetRequestEntity(Stream stream)
|
||
{
|
||
using (XmlReader xr = XmlReader.Create(stream))
|
||
{
|
||
var doc = XDocument.Load(xr);
|
||
|
||
return GetRequestEntity(doc);
|
||
}
|
||
}
|
||
}
|
||
}
|