生成数据注释

时间:2016-07-16 19:29:37

标签: c# asp.net-web-api asp.net-core asp.net-core-mvc

我最近一直在学习Web API,并计划使用它来提高我的MVC应用程序的可伸缩性。但是,当我最终创建Web API控制器时,我发现应用于控制器类的[Produces("application/json")]注释。我还没有弄清楚注释的作用。我希望控制器只接受json输入,这个标签对我有用吗?

2 个答案:

答案 0 :(得分:9)

ProducesAnnotation只对响应格式有所影响。因此,这对您限制输入的需求没有帮助。

您可以使用ASP.NET Core MVC框架中的ProducesAnnotation将内容协商过程指向特定类型,以输出控制器操作或特定操作。 从文档(https://docs.asp.net/en/latest/mvc/models/formatting.html):

  

如果您想限制特定的响应格式   你可以采取行动,你可以应用[Produces]过滤器。

如果要在全局级别限制json的输入,可以在启动时将MVC配置为在Startup.cs中只有一个类型为JsonInputFormatter的InputFormatter。

public void ConfigureServices(IServiceCollection services)
{
    ...    
    // Add framework services.
    services.AddMvc(config =>
    {
        // Add XML Content Negotiation
        config.RespectBrowserAcceptHeader = true;
        config.InputFormatters.Clear();
        config.InputFormatters.Add(new JsonInputFormatter());
    });
    ...
}

在控制器或动作级别,[Produces]的对应部分是[Consumes]注释。与

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

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

希望这有帮助。

答案 1 :(得分:1)

是的,Produces属性将响应限制为仅定义的类型。您可以通过这种方式使用属性添加多个。

[Produces("application/json", "application/xml")]

ASP.NET Core使用JSON的默认值。如果还需要xml,则还必须在ConfigureServices方法中指定xml格式化程序。

services.AddMvc()
            .AddMvcOptions(o => o.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter()));