コード例 #1
0
        public ResponseXsd GetXsd(int requestCode)
        {
            log.Debug("Запуск");
            log.Debug($"requestCode: {requestCode}");
            log.Debug($"Token: {GetTokenValue()}");
            if (!AuthorizeHelpers.IsAuthorized(_dbContext, GetTokenValue(), requestCode, out ResponseXsd response, out var externalSystem))
            {
                log.Error($"Авторизация не пройдена. Причина: {response.Error}");
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.Forbidden, response));
            }

            log.Debug("Авторизация пройдена");
            var imp = new IncomingMessageProcessor(_dbContext, externalSystem);

            response = imp.GetXsd(requestCode);
            log.Debug($"Результат:\r\n{response}");

            if (response.IsError)
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest, response));
            }

            log.Debug("Звершение");
            return(response);
        }
コード例 #2
0
        public Response GetResponse(Guid requestId)
        {
            log.Debug("Запуск");
            log.Debug($"Сообщение:\r\n{OperationContext.Current.RequestContext.RequestMessage}");
            log.Debug($"requestId: {requestId}");
            log.Debug($"Token: {WebOperationContext.Current.IncomingRequest.Headers["Token"]}");
            if (!AuthorizeHelpers.IsAuthorized(_dbContext,
                                               WebOperationContext.Current.IncomingRequest.Headers["Token"],
                                               requestId,
                                               out Response response,
                                               out var externalSystem))
            {
                log.Error($"Авторизация не пройдена. Причина: {response.Error}");
                WebOperationContext.Current.OutgoingResponse.StatusCode = HttpStatusCode.Forbidden;
                return(response);
            }

            log.Debug("Авторизация пройдена");
            IncomingMessageProcessor imp = new IncomingMessageProcessor(_dbContext, externalSystem);

            response = imp.GetResponse(requestId);
            log.Debug($"Результат:\r\n{response}");
            log.Debug("Звершение");
            return(response);
        }
コード例 #3
0
        public ResponseId ExecuteRequestAsync([FromBody] Request request)
        {
            log.Debug("Запуск");
            log.Debug($"request:\r\n{request}");
            log.Debug($"Token: {GetTokenValue()}");
            if (!AuthorizeHelpers.IsAuthorized(_dbContext, GetTokenValue(), request.Code, out ResponseId response, out var externalSystem))
            {
                log.Error($"Авторизация не пройдена. Причина: {response.Error}");
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.Forbidden, response));
            }

            log.Debug("Авторизация пройдена");
            IncomingMessageProcessor imp = new IncomingMessageProcessor(_dbContext, externalSystem);

            response = imp.ExecuteAsync(request);
            log.Debug($"Результат:\r\n{response}");
            log.Debug("Звершение");
            return(response);
        }
コード例 #4
0
        public async Task <Response> FileUpload()
        {
            log.Debug("Запуск");
            log.Debug($"Token: {GetTokenValue()}");

            var isMimeMultipartContent = Request.Content.IsMimeMultipartContent();

            log.Debug($"isMimeMultipartContent: {isMimeMultipartContent}");

            if (!isMimeMultipartContent)
            {
                var errorResponse = new ResponseId
                {
                    IsError = true,
                    Error   = "Некорректный Content-Type, ожидаем на вход MimeMultipart"
                };
                log.Error(errorResponse);

                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.UnsupportedMediaType, errorResponse));
            }

            var provider = new MultipartMemoryStreamProvider();

            try
            {
                await Request.Content.ReadAsMultipartAsync(provider);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message);
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest, new ResponseId
                {
                    IsError = true,
                    Error   = ex.Message
                }));
            }

            log.Debug($"Contents count: {provider.Contents.Count}");

            if (provider.Contents.Count != 2)
            {
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest, new ResponseId
                {
                    IsError = true,
                    Error   = "Тело запроса должно состоять из файла и json-объекта"
                }));
            }

            HttpContent json = provider.Contents.FirstOrDefault(c => c.Headers.ContentType.MediaType == "application/json");

            if (json == null)
            {
                var errorResponse = new Response
                {
                    IsError = true,
                    Error   = "В теле запроса нет части с Content-type: application/json"
                };
                log.Error(errorResponse);

                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest, errorResponse));
            }

            UploadFileRequest fileInfo = null;

            try
            {
                log.Debug("Чтение json объекта с метаданными загружаемого файла");
                byte[] jsonAsArray = json.ReadAsByteArrayAsync().Result;
                using (var stream = new MemoryStream(jsonAsArray))
                {
                    var sr         = new StreamReader(stream);
                    var rawJsonStr = sr.ReadToEnd();
                    log.Debug($"Raw JSON string: {rawJsonStr}");
                    fileInfo = JsonConvert.DeserializeObject <UploadFileRequest>(rawJsonStr);
                }
            }
            catch (Exception ex)
            {
                log.Error(ex.Message);
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest, new ResponseId
                {
                    IsError = true,
                    Error   = ex.Message
                }));
            }

            if (!AuthorizeHelpers.IsAuthorized(_dbContext, GetTokenValue(), fileInfo.RequestCode, out Response response,
                                               out var externalSystem))
            {
                log.Error($"Авторизация не пройдена. Причина: {response.Error}");
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.Forbidden, response));
            }

            log.Debug("Авторизация пройдена");
            HttpContent file = provider.Contents.FirstOrDefault(c => c.Headers.ContentType.MediaType != "application/json");

            if (file == null)
            {
                var errorResponse = new ResponseId
                {
                    IsError = true,
                    Error   = "В теле запроса нет части с файлом"
                };
                log.Error(errorResponse);
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest, errorResponse));
            }

            string fileName = file.Headers.ContentDisposition.FileName.Replace("\"", "");

            log.Debug($"fileName: {fileName}");
            UploadFileRequest.ValidateFileName(fileName, Request);


            byte[] fileAsArray = file.ReadAsByteArrayAsync().Result;
            try
            {
                var imp = new IncomingMessageProcessor(_dbContext, externalSystem);
                response = imp.FileUpload(fileInfo, fileName, fileAsArray);
            }
            catch (Exception ex)
            {
                log.Error(ex.Message);
                throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.BadRequest, new ResponseId
                {
                    IsError = true,
                    Error   = ex.Message
                }));
            }
            log.Debug($"Результат:\r\n{response}");
            log.Debug("Завершение");
            return(response);
        }