2016-08-02 30 views

回答

4

您可以將Consumes -Annotation與控制器或操作級別上接受的內容類型一起使用。

隨着

[Consumes("application/xml")] 
public class MyController : Controller 
{ 
    public IActionResult MyAction([FromBody] CallModel model) 
    { 
     .... 
    } 
} 

調用該控制器,如果客戶端提供的application/xml Content-Type頭纔會成功。否則,將返回415(不支持的媒體類型)。

1
  1. 您可以簡單地檢查請求AcceptTypes/Content-Type標頭(如if request.AcceptTypes.Contains("application/xml"))並停止請求處理。

  2. 根據您提供的鏈接,似乎您只是想忽略內容類型並始終返回XML結果。在這種情況下,您可以使用新的Produces屬性。

的過濾器,指定預計的System.Type的動作將返回和支持響應的內容類型。 Microsoft.AspNetCore.Mvc.ProducesAttribute.ContentTypes值用於設置Microsoft.AspNetCore.Mvc.ObjectResult.ContentTypes。

應用屬性到控制器

[Produces("application/xml")] 
public YourXmlController : Controller { } 

或只對特定的控制器操作:

[Produces("application/xml")] 
public Object ControllerAction() 
{ 
    return new { text = "hello world" }; 
} 

注意,這XML formatter默認不啓用,所以你應該添加一個使用MvcOptions:

services.Configure<MvcOptions>(options => 
{ 
    //options.InputFormatters.Add(...); 
    //options.OutputFormatters.Add(...); 
}); 
+1

有一個擴展方法來做到這一點。 'services.AddMvc()。AddXmlSerializerFormatters()'https://github.com/aspnet/Mvc/blob/1.0.0/src/Microsoft.AspNetCore.Mvc.Formatters.Xml/DependencyInjection/MvcXmlMvcCoreBuilderExtensions.cs#L38 – Tseng

相關問題