![](/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.