相关疑难解决方法(0)

从ASP.NET Web API中的控制器返回二进制文件

我正在使用ASP.NET MVC的新的WebAPI的网络服务,将成为了二进制文件,主要是.cab.exe文件.

以下控制器方法似乎有效,这意味着它返回一个文件,但它将内容类型设置为application/json:

public HttpResponseMessage<Stream> Post(string version, string environment, string filetype)
{
    var path = @"C:\Temp\test.exe";
    var stream = new FileStream(path, FileMode.Open);
    return new HttpResponseMessage<Stream>(stream, new MediaTypeHeaderValue("application/octet-stream"));
}
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

asp.net asp.net-mvc asp.net-web-api

313
推荐指数
7
解决办法
26万
查看次数

使用StreamContent时如何正确处理流

我正在尝试从我的webapi端点返回一个流,然后通过处理流来清理.

我希望这是正确的方法,但是当然在返回之前处理流.

using(var stream = GetStream()){
    var response = new HttpResponseMessage();
    response.Content = new StreamContent(stream);

    return response;
}
Run Code Online (Sandbox Code Playgroud)

处理流的正确方法是什么?

(由于MSDN没有说明StreamContent或其方法的行为,我的临时解决方案是将流的内容复制到字节数组并返回.)

.net c# asp.net-web-api

27
推荐指数
1
解决办法
5725
查看次数

ASP.NET Core HTTPRequestMessage返回奇怪的JSON消息

我目前正在使用ASP.NET Core RC2,我遇到了一些奇怪的结果.所以我有一个MVC控制器,具有以下功能:

public HttpResponseMessage Tunnel() {
    var message = new HttpResponseMessage(HttpStatusCode.OK);
    message.Content = new StringContent("blablabla", Encoding.UTF8);
    message.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("text/plain");
    message.Headers.CacheControl = new System.Net.Http.Headers.CacheControlHeaderValue {
        NoCache = true
    };

    return message;
}
Run Code Online (Sandbox Code Playgroud)

如果我用邮递员调用此方法并将Accept标头设置为text plain,我会收到以下回复:

{
  "Version": {
    "Major": 1,
    "Minor": 1,
    "Build": -1,
    "Revision": -1,
    "MajorRevision": -1,
    "MinorRevision": -1
  },
  "Content": {
    "Headers": [
      {
        "Key": "Content-Type",
        "Value": [
          "text/plain"
        ]
      }
    ]
  },
  "StatusCode": 200,
  "ReasonPhrase": "OK",
  "Headers": [
    {
      "Key": "Cache-Control",
      "Value": [
        "no-cache"
      ]
    }
  ], …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-core-mvc asp.net-core .net-core-rc2

15
推荐指数
1
解决办法
1万
查看次数

如何从WebAPI ASP.NET Core返回Excel文件

在类似的问题中,使用此代码可以下载PDF:

我正在使用Controller文件夹中的本地文件(.xlsx,.pdf,.zip)进行测试.

类似的问题

[HttpGet("downloadPDF")]
public FileResult TestDownloadPCF()
{
   HttpContext.Response.ContentType = "application/pdf";
   FileContentResult result = new FileContentResult
   (System.IO.File.ReadAllBytes("Controllers/test.pdf"), "application/pdf")
    {
      FileDownloadName = "test.pdf"
    };
   return result;
}
Run Code Online (Sandbox Code Playgroud)

这很棒!

但是当另一个文件?,例如Excel文件(.xlsx)或ZIP文件(.zip)时,测试无法正常工作.

代码:

[HttpGet("downloadOtherFile")]
public FileResult TestDownloadOtherFile()
{
  HttpContext.Response.ContentType = 
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
  FileContentResult result = new FileContentResult(System.IO.File.ReadAllBytes("Controllers/test.xlsx"), 
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
  {
    FileDownloadName = "otherfile"
   };
  return result;
}
Run Code Online (Sandbox Code Playgroud)

结果: 在此输入图像描述

我还使用以下内容类型进行了测试:

  • "Application/vnd.ms-excel"
  • "Application/vnd.ms-excel.12"

获得相同的结果.

哪种方法可以返回任何文件类型?

谢谢你的回答

c# http asp.net-web-api asp.net-core asp.net-core-1.0

12
推荐指数
2
解决办法
1万
查看次数

从ASP.NET 5 Web API返回文件

我之前的问题:如何从ASP.net 5 web api返回文件

我试图返回一个文件作为Web API POST请求的响应.

我正在使用dnx451框架和rc1-final构建.控制器方法:

[HttpPost("")]
public ActionResult Post([FromBody]DocumentViewModel vm)
{
    try
    {
        if (ModelState.IsValid)
        {

            var Document = _repository.GetDocumentByGuid(vm.DocumentGuid, User.Identity.Name);
            var Params = Helper.ClientInputToRealValues(vm.Parameters, Document.DataFields);
            var file = Helper.GeneratePdf(Helper.InsertValues(Params, Document.Content));
            FileStream stream = new FileStream(file,FileMode.Open);

            return File(stream, "application/pdf", "test.pdf");

        }

    }
    catch (Exception ex)
    {
        Response.StatusCode = (int)HttpStatusCode.BadRequest;
        return null;
    }
    Response.StatusCode = (int)HttpStatusCode.BadRequest;
    return null;

}
Run Code Online (Sandbox Code Playgroud)

结果我得到一个名为"response"的文件.将其保存为pdf后,我尝试打开它,它说它已损坏.希望您能够帮助我.我使用Postman作为测试客户端.

谢谢

c# asp.net-web-api asp.net-core

10
推荐指数
2
解决办法
2万
查看次数