将自定义的HttpResponseMessage作为IActionResult返回。

问题描述 投票:2回答:1

我有一个web api,它返回 IActionResult.

我回来了 FileContentResult 从这个api这样的

return new FileContentResult(model.Content, ContentType)
{
    EnableRangeProcessing = true
};

我有一个需求,我现在想控制的是 StatusCode 我自己,而不是 FileContentResult 自己决定。

我找不到任何方法可以做到这一点。

基本上我想把我自己设计的 HttpResponseMessage 中,我可以自己设置标题和其他东西。

但我没有找到任何方法来为 IActionResult 型。

我认为唯一可行的是使用 ResponseMessageResult 这样

var content = new ByteArrayContent(bytesWithValidationData);
var response = new HttpResponseMessage();
response.Content = content;
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.StatusCode = HttpStatusCode.PartialContent;
response.Content.Headers.ContentRange = new ContentRangeHeaderValue(from, to);

return new ResponseMessageResult(response);

但它的响应和HttpResponse不一样,它只是返回带有 HttpResponseMessage 对象的详细信息,但考虑到内容类型等因素,实际上并没有返回Http响应,我可以在哪里下载文件。

它给出的结果是这样的

enter image description here

有什么方法可以让我返回我设计的文件结果类型http响应?

c# asp.net-core httpresponse actionresult webapi
1个回答
0
投票

传统的ASP.NET Core Web API对原始的内容有特殊的处理方式。HttpResponseMessage 实例。ASP.NET Core没有--你的控制器动作。必须 返回一个 IActionResult.

在你的情况下,我建议将 FileContentResult 并操作状态代码,然后从控制器返回你的子类。就像下面这样。

public class MyFileContentResult : FileContentResult
{
    public override Task ExecuteResultAsync(ActionContext context)
    {
        var result = base.ExecuteResultAsync(context);

        context.HttpContext.Response.StatusCode = <your status code>;

        return result;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.