簡體   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