Beispiel #1
0
        /// <summary>
        /// 处理业务逻辑
        /// </summary>
        /// <param name="userToken"></param>
        public override void HttpHandle(IUserToken userToken)
        {
            IHttpResult result = null;

            try
            {
                this.InitSession(userToken);

                switch (Request.Method)
                {
                case ConstHelper.GET:
                case ConstHelper.POST:
                case ConstHelper.PUT:
                case ConstHelper.DELETE:

                    if (Request.Query.Count > 0)
                    {
                        foreach (var item in Request.Query)
                        {
                            Request.Parmas[item.Key] = item.Value;
                        }
                    }
                    if (Request.Forms.Count > 0)
                    {
                        foreach (var item in Request.Forms)
                        {
                            Request.Parmas[item.Key] = item.Value;
                        }
                    }
                    if (OnRequestDelegate != null)
                    {
                        OnRequestDelegate.Invoke(this);
                    }
                    else
                    {
                        result = GetActionResult();
                    }
                    break;

                case ConstHelper.OPTIONS:
                    result = new HttpEmptyResult();
                    break;

                default:
                    result = new HttpContentResult("不支持的请求方式", System.Net.HttpStatusCode.NotImplemented);
                    break;
                }
            }
            catch (Exception ex)
            {
                result = OnException?.Invoke(this, ex);
            }

            if (result != null && !(result is IBigDataResult))
            {
                Response.SetCached(result, this.Session.CacheCalcString);

                Response.End();
            }
        }
Beispiel #2
0
 static void PrintHttpResult(IHttpResult result)
 {
     Console.WriteLine(result.Url);
     Console.WriteLine(result.RequestBody);
     Console.WriteLine(result.ResponseBody);
     Console.WriteLine();
 }
        private async Task <PixivOAuthResponse> DoRefreshToken()
        {
            var authResponse = await _authStore.GetAuthResponseAsync();

            var canRefreshToken = authResponse != null && !string.IsNullOrWhiteSpace(authResponse.RefreshToken);
            IHttpResult <PixivOAuthProtocal <PixivOAuthResponse> > result = null;

            if (canRefreshToken)
            {
                result = await _oAuth2Api.RefreshToken(this._oAuth2TokenPath, this._request, authResponse.RefreshToken, "refresh_token");

                if (result != null && result.IsSuccessStatusCode)
                {
                    authResponse = result.Content.Response;
                    await _authStore.AddAuthResponseAsync(authResponse);
                }
            }

            if (!canRefreshToken || (result != null && result.StatusCode == HttpStatusCode.BadRequest))
            {
                authTokenTask = TaskWhenEnd(authTokenTask, () => DoAuthToken());
                authResponse  = await authTokenTask;
            }

            return(authResponse);
        }
Beispiel #4
0
        public IHttpResult CreateHttpResult()
        {
            var         httpResultType = MethodDescription.ReturnTypeDescription.HttpResultType;
            IHttpResult httpResult     = null;

            if (httpResultType == typeof(HttpResult <>))
            {
                httpResult = (IHttpResult)Activator.CreateInstance(typeof(HttpResult <>).MakeGenericType(this.MethodDescription.ReturnTypeDescription.TargetObjectType), this.HttpClientSettings.JsonSerializerSettings);
            }
            else
            {
                var constructors = httpResultType.GetConstructors();
                if (constructors.Any(w => w.GetParameters()
                                     .Count(p => p.ParameterType == typeof(JsonSerializerSettings)) == 1))
                {
                    httpResult =
                        (IHttpResult)Activator.CreateInstance(httpResultType,
                                                              this.HttpClientSettings.JsonSerializerSettings);
                }
                else
                {
                    httpResult = (IHttpResult)Activator.CreateInstance(httpResultType);
                }
            }
            httpResult.RequestMessage = this.HttpRequestMessage;
            return(httpResult);
        }
Beispiel #5
0
 public HttpResultException(IHttpResult httpResult, Exception ex)
     : base("HttpResult parse fail, httpCode:"
            + httpResult.StatusCode
            + (httpResult.RequestMessage != null ? (", url:" + httpResult.RequestMessage.RequestUri) : "")
            , ex)
 {
     this.HttpResult = httpResult;
 }
Beispiel #6
0
        public IHttpResult Clean(IHttpResult secureHttpResult)
        {
            var cleanResult = secureHttpResult.Copy();

            cleanResult.Url          = _cleaner.CleanUrl(secureHttpResult.Url);
            cleanResult.RequestBody  = _cleaner.CleanReqBody(secureHttpResult.RequestBody);
            cleanResult.ResponseBody = _cleaner.CleanResBody(secureHttpResult.ResponseBody);
            return(cleanResult);
        }
Beispiel #7
0
        /// <summary>
        /// 设置回复内容
        /// </summary>
        /// <param name="result"></param>
        public void SetCached(IHttpResult result, string cacheCalcResult = "-1,-1")
        {
            this.Status = result.Status;

            #region cached

            var carr = cacheCalcResult.Split(",").Select(b => Convert.ToInt32(b)).ToArray();

            if (carr.Length == 2 && carr[0] >= 0)
            {
                this.SetHeader(ResponseHeaderType.CacheControl, "Max-Age=" + carr[1]);
                this.SetHeader(ResponseHeaderType.Expires, DateTimeHelper.Now.AddSeconds(carr[1]).ToGMTString());
                this.Status = HttpStatusCode.OK;

                if (carr[0] == 0)
                {
                    this.Headers["Last-Modified"] = DateTimeHelper.Now.ToGMTString();
                }

                if (carr[0] == 1)
                {
                    if (carr[1] > 0)
                    {
                        this.Status = HttpStatusCode.NotModified;

                        return;
                    }
                }
            }
            else
            {
                this.SetHeader(ResponseHeaderType.CacheControl, "no-cache");
            }

            #endregion

            if (result is IEmptyResult || result is IBigDataResult)
            {
                return;
            }
            else if (result is IFileResult)
            {
                var fileResult = (IFileResult)result;
                this.ContentType = fileResult.ContentType;
                this.SetContent(fileResult.Content);
            }
            else
            {
                this.ContentType = result.ContentType;
                this.SetContent(result.Content);
            }
        }
Beispiel #8
0
        public static Task <IHttpResult> ParseAsHttpResult(this Task <HttpResponseMessage> responseMessageTask, Type returnObjectType, HttpClientSettings httpClientSettings)
        {
            return(responseMessageTask.Then(async responseMessage =>
            {
                IHttpResult httpResult = (IHttpResult)Activator.CreateInstance(typeof(HttpResult <>).MakeGenericType(returnObjectType), httpClientSettings.JsonSerializerSettings);

                httpResult.Headers = responseMessage.Headers;
                httpResult.IsSuccessStatusCode = responseMessage.IsSuccessStatusCode;
                httpResult.ReasonPhrase = responseMessage.ReasonPhrase;
                httpResult.StatusCode = responseMessage.StatusCode;
                httpResult.Version = responseMessage.Version;

                if (responseMessage.Content != null)
                {
                    httpResult.ContentHeaders = responseMessage.Content.Headers;
                }

                if (responseMessage.IsSuccessStatusCode)
                {
                    if (returnObjectType.IsBulitInType())
                    {
                        httpResult.Content = ObjectExtensions.ChangeType(await responseMessage.Content.ReadAsStringAsync(), returnObjectType);
                        responseMessage.Dispose();
                    }
                    else if (typeof(Stream).IsAssignableFrom(returnObjectType))
                    {
                        httpResult.Content = await responseMessage.Content.ReadAsStreamAsync();
                    }
                    else if (typeof(byte[]) == returnObjectType)
                    {
                        httpResult.Content = await responseMessage.Content.ReadAsByteArrayAsync();
                        responseMessage.Dispose();
                    }
                    else
                    {
                        httpResult.Content = await responseMessage.Content.ReadAsAsync(returnObjectType, new[] { httpClientSettings.JsonMediaTypeFormatter });
                        responseMessage.Dispose();
                    }
                }
                else
                {
                    httpResult.ErrorMessage = await responseMessage.Content.ReadAsStringAsync();
                    responseMessage.Dispose();
                }
                return httpResult;
            }));
        }
        public static IHttpResult SuccessAuthResult(this IHttpResult result, IServiceBase service, IAuthSession session)
        {
            var feature = HostContext.GetPlugin <AuthFeature>();

            if (result != null && feature != null)
            {
                var hasAuthResponseFilter = feature.AuthProviders.Any(x => x is IAuthResponseFilter);
                if (hasAuthResponseFilter)
                {
                    var ctx = new AuthResultContext {
                        Result  = result,
                        Service = service,
                        Session = session,
                        Request = service.Request,
                    };
                    foreach (var responseFilter in feature.AuthProviders.OfType <IAuthResponseFilter>())
                    {
                        responseFilter.ResultFilterAsync(ctx).Wait();
                    }
                }
            }
            return(result);
        }
Beispiel #10
0
        /// <summary>
        /// 处理业务逻辑
        /// </summary>
        /// <param name="userToken"></param>
        public override void HttpHandle(IUserToken userToken)
        {
            IHttpResult result = null;

            try
            {
                this.InitSession(userToken);

                switch (this.Request.Method)
                {
                case ConstHelper.GET:
                case ConstHelper.POST:
                case ConstHelper.PUT:
                case ConstHelper.DELETE:

                    if (this.Request.Query.Count > 0)
                    {
                        foreach (var item in this.Request.Query)
                        {
                            this.Request.Parmas[item.Key] = item.Value;
                        }
                    }
                    if (this.Request.Forms.Count > 0)
                    {
                        foreach (var item in this.Request.Forms)
                        {
                            this.Request.Parmas[item.Key] = item.Value;
                        }
                    }
                    if (OnRequestDelegate != null)
                    {
                        OnRequestDelegate.Invoke(this);
                    }
                    else
                    {
                        result = GetActionResult();
                    }
                    break;

                case ConstHelper.OPTIONS:
                    result = new EmptyResult();
                    break;

                default:
                    result = new ContentResult("不支持的请求方式", System.Net.HttpStatusCode.HttpVersionNotSupported);
                    break;
                }
            }
            catch (Exception ex)
            {
                result = OnException.Invoke(this, ex);

                if (result == null)
                {
                    result = new ContentResult("请求发生异常:" + ex.Message, System.Net.HttpStatusCode.InternalServerError);
                }
            }

            if (result != null)
            {
                if (!(result is IBigDataResult || result is IEventStream))
                {
                    Response.SetCached(result, this.Session.CacheCalcString);

                    Response.End();
                }
            }
        }
Beispiel #11
0
        /// <summary>
        /// 处理业务逻辑
        /// </summary>
        /// <param name="userToken"></param>
        /// <param name="httpMessage"></param>
        public override void HttpHandle(IUserToken userToken, HttpMessage httpMessage)
        {
            base.HttpHandle(userToken, httpMessage);

            IHttpResult result = null;

            try
            {
                switch (Request.Method)
                {
                case ConstHelper.GET:
                case ConstHelper.POST:
                case ConstHelper.PUT:
                case ConstHelper.DELETE:

                    if (Request.Query.Count > 0)
                    {
                        foreach (var item in Request.Query)
                        {
                            Request.Parmas[item.Key] = item.Value;
                        }
                    }
                    if (Request.Forms.Count > 0)
                    {
                        foreach (var item in Request.Forms)
                        {
                            Request.Parmas[item.Key] = item.Value;
                        }
                    }
                    if (OnRequestDelegate != null)
                    {
                        OnRequestDelegate.Invoke(this);
                    }
                    else
                    {
                        result = GetActionResult();
                    }
                    break;

                case ConstHelper.OPTIONS:
                    result = new HttpEmptyResult();
                    break;

                default:
                    result = new HttpContentResult("不支持的请求方式", System.Net.HttpStatusCode.HttpVersionNotSupported);
                    break;
                }
            }
            catch (Exception ex)
            {
                result = OnException?.Invoke(this, ex);
            }

            if (result != null)
            {
                if (!(result is IBigDataResult))
                {
                    if (result is IFileResult && _webHost.WebConfig.IsStaticsCached)
                    {
                        Response.SetCached(result, "60,60");
                    }
                    else
                    {
                        Response.SetCached(result, this.Session.CacheCalcString);
                    }
                    Response.End();
                }
            }
        }