解决 args 变量没有赋值导致的参数传递失败的问题。by Soar360
大石头 编写于 2023-09-09 07:16:48
X
using System;
using System.Collections.Generic;
using NewLife.Collections;
using NewLife.Net;

namespace NewLife.Http
{
    /// <summary>Http上下文</summary>
    public interface IHttpContext
    {
        #region 属性
        /// <summary>请求</summary>
        HttpRequest Request { get; }

        /// <summary>响应</summary>
        HttpResponse Response { get; }

        /// <summary>连接会话</summary>
        INetSession Connection { get; }

        /// <summary>WebSocket连接</summary>
        WebSocket WebSocket { get; }

        /// <summary>执行路径</summary>
        String Path { get; }

        /// <summary>处理器</summary>
        IHttpHandler Handler { get; }

        /// <summary>请求参数</summary>
        IDictionary<String, Object> Parameters { get; }
        #endregion
    }

    /// <summary>默认Http上下文</summary>
    public class DefaultHttpContext : IHttpContext
    {
        #region 属性
        /// <summary>请求</summary>
        public HttpRequest Request { get; set; }

        /// <summary>响应</summary>
        public HttpResponse Response { get; set; }

        /// <summary>连接会话</summary>
        public INetSession Connection { get; set; }

        /// <summary>WebSocket连接</summary>
        public WebSocket WebSocket { get; set; }

        /// <summary>执行路径</summary>
        public String Path { get; set; }

        /// <summary>处理器</summary>
        public IHttpHandler Handler { get; set; }

        /// <summary>请求参数</summary>
        public IDictionary<String, Object> Parameters { get; } = new NullableDictionary<String, Object>(StringComparer.OrdinalIgnoreCase);
        #endregion

        #region 静态
        [ThreadStatic]
        private static IHttpContext _current;

        /// <summary>当前上下文</summary>
        public static IHttpContext Current { get => _current; set => _current = value; }
        #endregion
    }
}