Exemple #1
0
 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 = "转换失败"
             }));
         }
     }
 }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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));
            }
        }
Exemple #4
0
        /// <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)));
        }