我想配置一個(也是唯一的)我的控制器只接受application/xml
請求。AspNetCore中的控制器配置
在過去,我使用IControllerConfiguration來執行類似here (Per-Controller configuration)的操作。
我如何在Aspnet Core中做到這一點?
我想配置一個(也是唯一的)我的控制器只接受application/xml
請求。AspNetCore中的控制器配置
在過去,我使用IControllerConfiguration來執行類似here (Per-Controller configuration)的操作。
我如何在Aspnet Core中做到這一點?
您可以將Consumes
-Annotation與控制器或操作級別上接受的內容類型一起使用。
隨着
[Consumes("application/xml")]
public class MyController : Controller
{
public IActionResult MyAction([FromBody] CallModel model)
{
....
}
}
調用該控制器,如果客戶端提供的application/xml
Content-Type頭纔會成功。否則,將返回415(不支持的媒體類型)。
您可以簡單地檢查請求AcceptTypes/Content-Type標頭(如if request.AcceptTypes.Contains("application/xml")
)並停止請求處理。
根據您提供的鏈接,似乎您只是想忽略內容類型並始終返回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(...);
});
有一個擴展方法來做到這一點。 'services.AddMvc()。AddXmlSerializerFormatters()'https://github.com/aspnet/Mvc/blob/1.0.0/src/Microsoft.AspNetCore.Mvc.Formatters.Xml/DependencyInjection/MvcXmlMvcCoreBuilderExtensions.cs#L38 – Tseng