引入redis服务,支持自动化单元测试
大石头 编写于 2022-03-31 22:56:30
X
using System;
using System.Collections;
using System.Reflection;
using NewLife.Reflection;
using NewLife.Remoting;

namespace NewLife.Http
{
    /// <summary>控制器处理器</summary>
    public class ControllerHandler : IHttpHandler
    {
        #region 属性
        /// <summary>控制器类型</summary>
        public Type ControllerType { get; set; }
        #endregion

        /// <summary>处理请求</summary>
        /// <param name="context"></param>
        public virtual void ProcessRequest(IHttpContext context)
        {
            var ss = context.Path.Split('/');
            var methodName = ss[2];

            var controller = ControllerType.CreateInstance();

            var method = ControllerType.GetMethod(methodName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.IgnoreCase);
            if (method == null) throw new ApiException(404, $"控制器[{ControllerType.FullName}]内无法找到操作[{methodName}]");

            var result = controller.InvokeWithParams(method, context.Parameters as IDictionary);

            context.Response.SetResult(result);
        }
    }
}