Передать большое количество данных в метод get MVC - PullRequest
0 голосов
/ 21 сентября 2018

У меня есть форма angularjs, и я хотел бы, чтобы пользователи могли загружать заполненный PDF-файл с тем, что они запрашивали.У меня есть метод [HTTPGet], который принимает кодировку base64 запроса json.Все работает за исключением случаев, когда моя кодировка base64 превышает 2027 символов в длину.Когда это происходит, я не получаю ничего больше, чем 2027 символов.Есть ли другой способ отправить данные по вызову get или лучший способ сделать это.

Это делает мое приложение angular js.

scope.DownloadTempResults = function () {
                window.open('/Home/GetCopyOfRequest?strRequest=' + window.btoa(JSON.stringify(scope.request)), '_blank', '');
            }

Мой код на C # делает это.

[HttpGet]
public ActionResult GetCopyOfRequest(string strRequest)
{
     byte[] data = Convert.FromBase64String(strRequest);
     string request = Encoding.UTF8.GetString(data);
     ExternalModel model = JsonHelper.Deserialize<ExternalModel>(request);

     byte[] filedata = ObjectFactory.GetInstance<ManagerFactory>().Create().CreateRequestForm(model);
     string contentType = "application/pdf";
     var cd = new System.Net.Mime.ContentDisposition
     {
          FileName = "name of File",
          Inline = true
     };
     Response.AppendHeader("Content-Disposition", cd.ToString());
     return File(filedata, contentType);
}

В конце концов мы пытаемся закодировать json в строке запроса, чтобы вы не могли смотреть непосредственно на строку запроса и получать значения объекта json.Если я делаю это совершенно неправильно, пожалуйста, дайте мне знать, что искать, чтобы выполнить это.

Обновлен здесь ниже. Итак, основываясь на комментариях, я перешел на метод публикации, которыйвыглядит следующим образом.

[HttpPost]
public HttpResponseMessage GetCopyOfRequest(string strRequest)
{
     ExternalModel model = JsonHelper.Deserialize<ExternalModel>(strRequest);
     byte[] filedata = ObjectFactory.GetInstance<IManagerFactory>().Create().CreateRequestForm(model);
     string fileName = "Request form for request";

     HttpResponseMessage httpResponseMessage = new HttpResponseMessage();
     httpResponseMessage.Content = new ByteArrayContent(filedata);
     httpResponseMessage.Content.Headers.Add("x-filename", fileName);
     httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
     httpResponseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
     httpResponseMessage.Content.Headers.ContentDisposition.FileName = fileName;
     httpResponseMessage.StatusCode = HttpStatusCode.OK;
     return httpResponseMessage;
}

В приложении angularjs у меня есть следующий код.

$http({
            url: '/Home/GetCopyOfRequest',
            method: 'POST',
            data: { strRequest: JSON.stringify(request) },
            responseType: 'arraybuffer'
        }).success(function (data, status, headers) {
            var file = new Blob([data], { type: 'application/pdf' });
            var fileURL = URL.createObjectURL(file);
            window.open(fileURL);
        }).error(function (response) {

        });

Когда я делаю это на сервере, мой байтовый массив имеет длину 400000.На стороне клиента у меня есть массив из 270. Я следовал примеру из Как отобразить поток PDF, созданный на стороне сервера, в javascript, отправленном через HttpMessageResponse Content .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...