public WeixinWelcomePageMiddleware( RequestDelegate next, IOptions <WeixinWelcomePageOptions> options, ILoggerFactory loggerFactory, IWeixinMessageEncryptor encryptor) { _next = next ?? throw new ArgumentNullException(nameof(next)); _logger = loggerFactory?.CreateLogger <WeixinWelcomePageMiddleware>() ?? throw new ArgumentNullException(nameof(loggerFactory)); _options = options?.Value ?? throw new ArgumentNullException(nameof(options)); _encryptor = encryptor ?? throw new ArgumentNullException(nameof(encryptor)); //入参检查 if (string.IsNullOrEmpty(_options.WebsiteToken)) { throw new ArgumentException($"参数 {nameof(_options.WebsiteToken)} 不能为空。"); } if (string.IsNullOrEmpty(_options.Path)) { throw new ArgumentException($"参数 {nameof(_options.Path)} 不能为空。"); } _backchannel = new HttpClient(new HttpClientHandler()); _backchannel.DefaultRequestHeaders.UserAgent.ParseAdd("AspNetCoreWeixin"); _backchannel.Timeout = TimeSpan.FromSeconds(60); _backchannel.MaxResponseContentBufferSize = 1024 * 1024 * 10; // 10 MB }
internal async Task <bool> InitializeAsync( WeixinWelcomePageOptions options, HttpContext context, ILogger logger, IWeixinMessageEncryptor encryptor) { _options = options ?? throw new ArgumentNullException(nameof(options)); HttpContext = context ?? throw new ArgumentNullException(nameof(context)); _logger = logger ?? throw new ArgumentNullException(nameof(logger)); _encryptor = encryptor ?? throw new ArgumentNullException(nameof(encryptor)); context.Response.OnStarting(OnStartingCallback, this); { InitializeResult = await HandleOnceAsync(); if (InitializeResult?.Handled == true) { return(true); } if (InitializeResult?.Failure != null) { _logger.LogWarning(0, InitializeResult.Failure, InitializeResult.Failure.Message); } } return(false); }
/// <summary> /// Initializes a <see cref="BaseWeixinContext"/> /// </summary> /// <param name="context">The HTTP environment</param> /// <param name="options">The options for <see cref="WeixinWelcomePageMiddleware"/></param> public BaseWeixinContext(HttpContext context, WeixinWelcomePageOptions options) : base(context) { Options = options; }
/// <summary> /// 构造函数 /// </summary> /// <param name="websiteToken">公众平台后台由开发者指定的Token</param> /// <param name="encodingAesKey">公众平台后台由开发者指定的EncodingAESKey</param> /// <param name="appId">公众帐号的appid</param> public WeixinMessageEncryptor(IOptions <WeixinWelcomePageOptions> optionsAccessor, ILoggerFactory loggerFactory) { _logger = loggerFactory?.CreateLogger <WeixinMessageEncryptor>() ?? throw new ArgumentNullException(nameof(loggerFactory)); _options = optionsAccessor?.Value ?? throw new ArgumentNullException(nameof(optionsAccessor)); }