有没有一种方法可以创建一个Accept属性来强制执行A​​SP.NET Core Controller Action中的Accept标头检查?

时间:2018-11-06 19:41:34

标签: c# .net asp.net-core asp.net-core-webapi

只是想知道是否有一种方法可以通过ASP.NET Core中的属性来强制检查HTTP标头值是否属于给定的给定值(例如application/jsonapplication/xml)< / p>

我知道有ProducesAttributehttps://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.producesattribute?view=aspnetcore-2.1):

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

但这更多是关于受支持的内容类型的,而不是真正的与Accept标头分析有关。

如果没有Accept标头的值,我会期望返回406 HTTP代码的类似内容。

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

如果没有现成的属性,该如何创建?

1 个答案:

答案 0 :(得分:3)

这样的属性是不必要的。 Accept标头仅是客户端为特定响应类型指定首选项的一种方式,客户端可以自由地询问其想要的任何内容。它在服务器上确定如何实际响应,如果它不支持特定的内容类型,则仅返回一个415 Unsupported Media Type响应。否则,它将根据客户端的Accept标头中的内容类型的顺序返回它实际支持的第一个内容类型。

FWIW,重要的是要了解HTTP和底层IP协议是有意设计的,以允许客户端和服务器之间的松散通信。 “请求”的术语非常暗含这种性质。服务器不能也不应该在客户端上强制任何行为,反之亦然。要么做的就是指定他们的偏好,然后协商(另一个关键术语)对特定请求的响应。

总之,您不能阻止客户要求诸如特定内容类型之类的东西。但是,在这种情况下,服务器可以响应它不支持给定类型。