我有一个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响应,我可以在哪里下载文件。
它给出的结果是这样的
有什么方法可以让我返回我设计的文件结果类型http响应?
传统的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;
}
}