![](/img/trans.png)
[英]Convert from HttpResponseMessage to IActionResult in .NET Core
[英]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.