簡體   English   中英

.net Core WebApi內容協商

[英].net Core WebApi Content Negotiation

我正在嘗試將CS​​V輸出格式化程序添加到我的.NET Core 1.1 WebApi中。

我已經安裝了WebAPIContrib.Core包( https://github.com/damienbod/WebAPIContrib.Core/tree/master/src/WebApiContrib.Core.Formatter.Csv )。

我的啟動現在看起來像這樣:

var csvFormatterOptions = new CsvFormatterOptions();
services.AddMvcCore(options =>
{
    options.OutputFormatters.Add(new CsvOutputFormatter(csvFormatterOptions));
    options.FormatterMappings.SetMediaTypeMappingForFormat("csv", MediaTypeHeaderValue.Parse("text/csv"));
})
.AddJsonFormatters()
.AddJsonOptions(options => new SerializationHelper().Configure(options.SerializerSettings));

我的控制器方法是完全通用的,看起來像這樣

[HttpGet("/api/export")]
[Produces("text/csv")]
public async Task<List<Data>> GetDataAsCsv()
{
    return await _someService.GetData();
}

我的問題是,如果我刪除produce屬性並且不發送接受標頭我仍然得到一個csv。 他怎么知道發回CSV? 我的其他方法仍然產生JSON,它應該是怎么樣我只是不明白為什么這是,我擔心它會引起問題。

內容協商是框架的一部分,但您需要更新操作以利用此功能。

[HttpGet("/api/export")]
public async Task<IActionResult> GetData() {
    List<Data> data = await _someService.GetData();
    return Ok(data); // <-- returns OkObjectResult with content negotiation baked in
}

要引用原始帖子中鏈接的repo,請查看其文檔中的以下內容

Get方法使用HTTP請求中的Accept標頭導出數據。 默認情況下,將返回Json。 如果Accept Header設置為'text / csv',則數據將作為csv返回。 GetDataAsCsv方法始終返回csv數據,因為Produces屬性用於強制執行此操作。

// GET api/csvtest
[HttpGet]
public IActionResult Get() {
    return Ok(DummyData());
}

[HttpGet]
[Route("data.csv")]
[Produces("text/csv")]
public IActionResult GetDataAsCsv() {
    return Ok( DummyData());
}

另外,如文檔中所示,您應確保在啟動時正確配置它。

開箱即用,ASP.NET Core只有Json(可能還有純文本)作為內容類型。

var csvOptions = new CsvFormatterOptions();
services.AddMvcCore(options => {
        options.RespectBrowserAcceptHeader = true;
    })
    .AddJsonFormatters()
    .AddJsonOptions(options => new SerializationHelper().Configure(options.SerializerSettings))
    .AddCsvSerializerFormatters(csvOptions);

請注意,默認情況下對RespectBrowserAcceptHeader的調用為false,因此如果要進行內容協商,則必須啟用此功能。

ASP.NET Core中的參考內容協商

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM