【问题标题】:Controller Configuration in AspNetCoreAspNetCore 中的控制器配置
【发布时间】:2016-08-02 08:15:26
【问题描述】:

我想将我的一个(并且只有一个)控制器配置为只接受 application/xml 请求。

过去,我使用 IControllerConfiguration 来做到这一点,就像 here (Per-Controller configuration) 描述的那样。

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

【问题讨论】:

    标签: asp.net-core


    【解决方案1】:

    您可以将Consumes-Annotation 与Controller 或Action 级别上接受的内容类型一起使用。

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

    只有当客户端提供 application/xml 的 Content-Type 标头时,对该控制器的调用才会成功。否则将返回 415(不支持的媒体类型)。

    【讨论】:

      【解决方案2】:
      1. 您可以简单地检查 Request 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( ... );
      });
      

      【讨论】:

      猜你喜欢
      • 2018-05-04
      • 2015-02-18
      • 2019-02-18
      • 1970-01-01
      • 2017-08-30
      • 2020-04-21
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      相关资源
      最近更新 更多