Asp.net web api 使用web api返回二进制数据

Asp.net web api 使用web api返回二进制数据,asp.net-web-api,asp.net-web-api2,Asp.net Web Api,Asp.net Web Api2,我有以下返回字节数组的控制器方法 public async Task<HttpResponseMessage> Get() { var model = new byte[] { 1, 2, 3 }; HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StreamContent(new

我有以下返回字节数组的控制器方法

    public async Task<HttpResponseMessage> Get()
    {
        var model = new byte[] { 1, 2, 3 };

        HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
        result.Content = new StreamContent(new MemoryStream(model));
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
        return result;
    }
公共异步任务Get() { var model=新字节[]{1,2,3}; HttpResponseMessage结果=新的HttpResponseMessage(HttpStatusCode.OK); 结果.内容=新的流内容(新的内存流(模型)); result.Content.Headers.ContentType=新的MediaTypeHeaderValue(“应用程序/八位字节流”); 返回结果; } 我认为这是一种使用web api实现此功能的旧方法。有更“现代”的版本吗


例如,现在返回
任务
是首选方式吗?如果是这样的话,从上面返回字节数组的代码是什么?

正如注释所指出的那样。我不认为有新的方法可以做到这一点。但是,如果您想返回
IHttpActionResult
,则有一个基本方法返回
ResponseMessageResult

public IHttpActionResult Get()
{
    var model = new byte[] { 1, 2, 3 };

    var result = new HttpResponseMessage(HttpStatusCode.OK)
    {
        Content = new StreamContent(new MemoryStream(model))
    };
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    return ResponseMessage(result);
}

此外,如果有人需要,要在AspNetCore WebApi2中返回二进制数据,请执行以下操作:

[Route("api/v1/export/excel")]
[HttpGet]
public IActionResult GetAsExcel()
{
    var exportStream = new MemoryStream();
    _exportService.ExportAllToExcel(exportStream);
    // Rewind the stream before we send it.
    exportStream.Position = 0;
    return new FileStreamResult(exportStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
}

我不相信有任何新的方法来处理这个问题。Web API 2没有更改。我发现您的方法中没有
wait
,因此您应该避免将其设置为
async
,只使用
HttpResponseMessage
作为返回类型。