using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using Serein.Library.Api;
using Serein.Library.Utils;
using System;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using Enum = System.Enum;
using Type = System.Type;
namespace Serein.Library.Web
{
///
/// 路由接口
///
public interface IRouter
{
///
/// 添加处理模块
///
///
void AddHandle(Type controllerType);
///
/// 路由解析开始处理
///
///
///
Task ProcessingAsync(HttpListenerContext context);
}
///
/// api请求处理模块
///
public class ApiHandleConfig
{
private readonly DelegateDetails delegateDetails;
///
/// Post请求处理方法中,入参参数类型
///
public enum PostArgType
{
///
/// 不做处理
///
None,
///
/// 使用Url参数
///
IsUrlData,
///
/// 使用整体的Boby参数
///
IsBobyData,
}
///
/// 添加处理配置
///
///
public ApiHandleConfig(MethodInfo methodInfo)
{
delegateDetails = new DelegateDetails(methodInfo);
var parameterInfos = methodInfo.GetParameters();
ParameterType = parameterInfos.Select(t => t.ParameterType).ToArray();
ParameterName = parameterInfos.Select(t => t.Name.ToLower()).ToArray();
PostArgTypes = parameterInfos.Select(p =>
{
bool isUrlData = p.GetCustomAttribute(typeof(UrlAttribute)) != null;
bool isBobyData = p.GetCustomAttribute(typeof(BobyAttribute)) != null;
if (isBobyData)
{
return PostArgType.IsBobyData;
}
else if (isUrlData)
{
return PostArgType.IsUrlData;
}
else
{
return PostArgType.None;
}
}).ToArray();
}
private readonly PostArgType[] PostArgTypes;
private readonly string[] ParameterName;
private readonly Type[] ParameterType;
///
/// 处理Get请求
///
///
///
///
public async Task