将大量数据传递给MVC get方法

时间:2018-09-21 15:26:22

标签: c# angularjs asp.net-mvc

我有一个angularjs表格,我希望用户能够下载他们所要求的PDF格式。我有一个[HTTPGet]方法,它接受json请求的base64编码。一切正常,除非我的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对象的值。如果我要彻底解决这个问题,请让我知道该怎么做。

此处更新如下。 因此,根据评论,我更改为如下所示的post方法。

[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。我遵循How to display a server side generated PDF stream in javascript sent via HttpMessageResponse Content中的示例。

0 个答案:

没有答案