/// <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(); } }
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); }
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); }
public HttpResultException(IHttpResult httpResult, Exception ex) : base("HttpResult parse fail, httpCode:" + httpResult.StatusCode + (httpResult.RequestMessage != null ? (", url:" + httpResult.RequestMessage.RequestUri) : "") , ex) { this.HttpResult = httpResult; }
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); }
/// <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); } }
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); }
/// <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(); } } }
/// <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(); } } }