public JsonResult Transform(string url) { if (string.IsNullOrWhiteSpace(url)) { return(Json(new { Code = 0, Info = "参数不符合要求" })); } using (var client = new UtilityClient()) { var result = client.GetTuhuDwz(url, "Setting"); if (result.Success && !string.IsNullOrWhiteSpace(result.Result)) { return(Json(new { Code = 1, Data = result.Result })); } else { return(Json(new { Code = 0, Info = "转换失败" })); } } }
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { Logger.Warn($"requestUri: {request.RequestUri}, method: {request.Method}"); if (request.RequestUri.ToString().StartsWith(WebApiSourceUrl, StringComparison.InvariantCultureIgnoreCase)) { try { UriBuilder forwardUri = new UriBuilder(request.RequestUri); var targetUri = new Uri(forwardUri.Uri.ToString().ToLowerInvariant().Replace(WebApiSourceUrl, WebApiDestinationUrl)); Logger.Warn($"targetUri: {targetUri}"); //send it on to the requested URL var apiRequest = new HttpRequestMessage(request.Method, targetUri); apiRequest.Version = request.Version; //Get methods doesn't support content-body if (request.Method != HttpMethod.Get) { var postData = await request.Content.ReadAsByteArrayAsync(); apiRequest.Content = new ByteArrayContent(postData); apiRequest.Content.Headers.ContentType = request.Content.Headers.ContentType; } using (WebRequestHandler messageHandler = new WebRequestHandler()) { messageHandler.ServerCertificateValidationCallback += RemoteCertificateValidationCallback; UtilityClient client = new UtilityClient(messageHandler); PrepareApiCall?.Invoke(client); //populate UtilityClient Headers based on claims, or other headers var apiResponse = await client.SendAsync(apiRequest, HttpCompletionOption.ResponseHeadersRead, cancellationToken); var respData = await apiResponse.Content.ReadAsByteArrayAsync(); var fResponse = request.CreateResponse(); fResponse.Content = new ByteArrayContent(respData); fResponse.Content.Headers.ContentType = apiResponse.Content.Headers.ContentType; fResponse.Content.Headers.ContentDisposition = apiResponse.Content.Headers.ContentDisposition; fResponse.ReasonPhrase = apiResponse.ReasonPhrase; fResponse.StatusCode = apiResponse.StatusCode; fResponse.Version = apiResponse.Version; //populate fResponse Headers based on apiResponse Headers if (fResponse.StatusCode == HttpStatusCode.Unauthorized) { //we have a 401 in api. Clear the local (in memory AND sql security token cache) //and send the 401 to the browser with clear FedAuth cookie. //The browser will refresh and will call (another perhaps) web server with no cookies, //but for html wif will redirect the browser to sts System.IdentityModel.Services.FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie(); } return fResponse; } } catch (Exception ex) { Logger.Error(ex); throw; } } else { return await base.SendAsync(request, cancellationToken); } }
protected override async Task <HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { Logger.Warn($"requestUri: {request.RequestUri}, method: {request.Method}"); if (request.RequestUri.ToString().StartsWith(WebApiSourceUrl, StringComparison.InvariantCultureIgnoreCase)) { try { UriBuilder forwardUri = new UriBuilder(request.RequestUri); var targetUri = new Uri(forwardUri.Uri.ToString().ToLowerInvariant().Replace(WebApiSourceUrl, WebApiDestinationUrl)); Logger.Warn($"targetUri: {targetUri}"); //send it on to the requested URL var apiRequest = new HttpRequestMessage(request.Method, targetUri); apiRequest.Version = request.Version; //Get methods doesn't support content-body if (request.Method != HttpMethod.Get) { var postData = await request.Content.ReadAsByteArrayAsync(); apiRequest.Content = new ByteArrayContent(postData); apiRequest.Content.Headers.ContentType = request.Content.Headers.ContentType; } using (WebRequestHandler messageHandler = new WebRequestHandler()) { messageHandler.ServerCertificateValidationCallback += RemoteCertificateValidationCallback; UtilityClient client = new UtilityClient(messageHandler); PrepareApiCall?.Invoke(client); //populate UtilityClient Headers based on claims, or other headers var apiResponse = await client.SendAsync(apiRequest, HttpCompletionOption.ResponseHeadersRead, cancellationToken); var respData = await apiResponse.Content.ReadAsByteArrayAsync(); var fResponse = request.CreateResponse(); fResponse.Content = new ByteArrayContent(respData); fResponse.Content.Headers.ContentType = apiResponse.Content.Headers.ContentType; fResponse.Content.Headers.ContentDisposition = apiResponse.Content.Headers.ContentDisposition; fResponse.ReasonPhrase = apiResponse.ReasonPhrase; fResponse.StatusCode = apiResponse.StatusCode; fResponse.Version = apiResponse.Version; //populate fResponse Headers based on apiResponse Headers if (fResponse.StatusCode == HttpStatusCode.Unauthorized) { //we have a 401 in api. Clear the local (in memory AND sql security token cache) //and send the 401 to the browser with clear FedAuth cookie. //The browser will refresh and will call (another perhaps) web server with no cookies, //but for html wif will redirect the browser to sts System.IdentityModel.Services.FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie(); } return(fResponse); } } catch (Exception ex) { Logger.Error(ex); throw; } } else { return(await base.SendAsync(request, cancellationToken)); } }
/// <summary> /// 获取用户的问卷链接信息 /// </summary> /// <param name="model"></param> /// <returns></returns> public static async Task <OperationResult <string> > GetQuestionnaireURLAsync(Models.Requests.GetQuestionnaireURLRequest model) { //AutoMapper初始化配置文件 var config = new MapperConfiguration(cfg => { cfg.CreateMap <Models.Requests.GetQuestionnaireURLRequest, UserQuestionnaireURLModel>(); }); var mapper = config.CreateMapper(); int objectId = 0;//业务对象ID UserQuestionnaireURLModel userModel = mapper.Map <UserQuestionnaireURLModel>(model); userModel.PageID = Guid.NewGuid(); userModel.OriginalURL = ConfigurationManager.AppSettings["QuestionnaireURL"].ToString() + "pageId=" + userModel.PageID; if (model.QuestionnaireType < 2)//售后问卷 { //获取问卷和定责部门关系信息 var mappingInfo = await DalQuestionnaireDptMapping.GetQuestionnaireDptMappingInfo(userModel.Department, userModel.ComplaintsType, userModel.IsAtStore); if (mappingInfo != null) { userModel.QuestionnaireNo = mappingInfo.QuestionnaireNo; } else { return(OperationResult.FromError <string>(nameof(Resource.Error_GetQuestionnaireURL_Failure), string.Format(Resource.Error_GetQuestionnaireURL_Failure))); } objectId = model.ComplaintsID; } else if (model.QuestionnaireType == 2)//售前问卷 { var questionnaireInfo = await DalQuestionnaire.GetQuestionnaireInfoByType(model.QuestionnaireType); userModel.QuestionnaireNo = questionnaireInfo.QuestionnaireNo; objectId = model.OrderID.Value; } //获取短连接 using (var client = new UtilityClient()) { var shortUrlResult = await client.GetTuhuDwzAsync(userModel.OriginalURL, "投诉问卷"); if (shortUrlResult.Success) { userModel.ShortURL = shortUrlResult.Result; } else { return(OperationResult.FromError <string>(nameof(Resource.Error_GetQuestionnaireURL_Failure), string.Format(Resource.Error_GetQuestionnaireURL_Failure))); } } //删除重复问卷答题记录和获取问卷记录 await QuestionnaireManager.DelExistRecord(model.UserID, objectId, model.QuestionnaireType); int result = await DalUserQuestionnaireURL.AddUserQuestionnaireURL(userModel); if (result > 0) { return(OperationResult.FromResult(userModel.ShortURL)); } return(OperationResult.FromError <string>(nameof(Resource.Error_GetQuestionnaireURL_Failure), string.Format(Resource.Error_GetQuestionnaireURL_Failure))); }