只是想知道是否有一种方法可以通过ASP.NET Core中的属性来强制检查HTTP标头值是否属于给定的给定值(例如application/json
,application/xml
)< / p>
我知道有ProducesAttribute
(https://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")]
如果没有现成的属性,该如何创建?
答案 0 :(得分:3)
这样的属性是不必要的。 Accept
标头仅是客户端为特定响应类型指定首选项的一种方式,客户端可以自由地询问其想要的任何内容。它在服务器上确定如何实际响应,如果它不支持特定的内容类型,则仅返回一个415 Unsupported Media Type
响应。否则,它将根据客户端的Accept
标头中的内容类型的顺序返回它实际支持的第一个内容类型。
FWIW,重要的是要了解HTTP和底层IP协议是有意设计的,以允许客户端和服务器之间的松散通信。 “请求”的术语非常暗含这种性质。服务器不能也不应该在客户端上强制任何行为,反之亦然。要么做的就是指定他们的偏好,然后协商(另一个关键术语)对特定请求的响应。
总之,您不能阻止客户要求诸如特定内容类型之类的东西。但是,在这种情况下,服务器可以响应它不支持给定类型。