繁体   English   中英

将自定义 HttpResponseMessage 作为 IActionResult 返回

[英]Returning custom HttpResponseMessage as IActionResult

我有一个 web api 返回IActionResult

我像这样从这个 api 返回FileContentResult

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 不同,它只返回 json 结果和HttpResponseMessage object 详细信息,但实际上并没有返回 Http 响应,考虑到内容类型等,我可以在哪里下载文件。

它给出了这样的结果

在此处输入图像描述

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

旧版 ASP.NET 核心 web API 对原始HttpResponseMessage实例进行了特殊处理。 ASP.NET 核心没有 - 您的 controller 操作必须返回IActionResult的实例。

在您的情况下,我建议FileContentResult进行子类化并操作状态代码,然后从 controller 返回您的子类。 类似于以下内容:

public class MyFileContentResult : FileContentResult
{
    public override Task ExecuteResultAsync(ActionContext context)
    {
        context.HttpContext.Response.StatusCode = <your status code>;

        var result = base.ExecuteResultAsync(context);

        return result;
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM