AspNetCore中的控制器配置

时间:2016-08-02 08:15:27

标签: asp.net-core

我想配置一个(并且只有一个)我的Controller只接受application/xml个请求。

在过去,我使用IControllerConfiguration执行此操作,如描述here (Per-Controller configuration)

我如何在Aspnet Core中做到这一点?

2 个答案:

答案 0 :(得分:5)

您可以在控制器或操作级别上使用Consumes - 注释以及接受的内容类型。

使用

[Consumes("application/xml")]
public class MyController : Controller
{
    public IActionResult MyAction([FromBody] CallModel model)
    {
        ....
    }
}
只有当客户端提供application/xml的Content-Type标头时,

对此控制器的调用才会成功。否则将返回415(不支持的媒体类型)。

答案 1 :(得分:1)

  1. 您只需检查Request AcceptTypes / Content-Type标头(如if request.AcceptTypes.Contains("application/xml"))并停止请求处理。

  2. 根据您提供的链接,您似乎只想忽略内容类型并始终返回XML结果。在这种情况下,您可以使用新的Produces属性。

  3.   

    一个过滤器,指定操作将返回的预期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( ... );
    });