我想配置一个(并且只有一个)我的Controller只接受application/xml
个请求。
在过去,我使用IControllerConfiguration执行此操作,如描述here (Per-Controller configuration)。
我如何在Aspnet Core中做到这一点?
答案 0 :(得分:5)
您可以在控制器或操作级别上使用Consumes
- 注释以及接受的内容类型。
使用
[Consumes("application/xml")]
public class MyController : Controller
{
public IActionResult MyAction([FromBody] CallModel model)
{
....
}
}
只有当客户端提供application/xml
的Content-Type标头时,对此控制器的调用才会成功。否则将返回415(不支持的媒体类型)。
答案 1 :(得分:1)
您只需检查Request 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( ... );
});