限制支持“content-type”s +默认内容类型

时间:2012-11-05 19:51:42

标签: servicestack

使用ServiceStack 3.9.2x。

开箱即用(并且在元数据页面上看到)服务堆栈内置了对一堆内容类型的支持 - xml,json,jsv等。告诉ServiceStack限制它的最佳方法是什么支持的内容集。例如,我的服务只知道如何说JSON,我不希望ServiceStack遵守运行“Content-type:application / xml”或“Accept:application / xml”标头的请求。在上述情况下,我希望ServiceStack以406(不可接受)响应进行响应,理想情况下包括支持内容的集合(根据HTTP 1.1规范)。

ServiceStack如何确定内容的默认类型是什么,不适用于不带有Accept或Content-Type标头的请求(我想我现在看到它呈现HTML)?有没有办法告诉ServiceStack在这些情况下采用特定的内容类型?

1 个答案:

答案 0 :(得分:2)

请参阅此答案,了解如何在ServiceStack中设置默认内容类型:ServiceStack default format

您可以使用Request Filter检测所请求的内容类型:

httpReq.ResponseContentType

在您的全局请求过滤器中,您可以选择允许它(不执行任何操作)或直接写入响应,例如406,您可以根据需要列出支持的内容。

ServiceStack操作顺序

Implementation architecture diagram显示ServiceStack中发生的操作顺序的视觉提示。其中:

  1. EndointHostConfig.RawHttpHandlers在其他任何事情之前执行,即完全返回任何ASP.NET IHttpHandler绕过ServiceStack。
  2. 在请求DTO反序列化之前执行IAppHost.PreRequestFilters
  3. Request Filter Attributes 优先级< 0 执行
  4. 然后执行任何Global Request Filters
  5. 后跟Request Filter Attributes 优先级> = 0
  6. 操作请求过滤器(仅限新API)
  7. 然后执行您的服务
  8. 操作响应过滤器(仅限新API)
  9. 后跟Response Filter Attributes 优先级< 0
  10. 然后Global Response Filters
  11. 后跟Response Filter Attributes 优先级> = 0
  12. 每当您在任何过滤器中关闭响应时,即httpRes.Close()响应的处理都会被短路,并且不会对该请求进行进一步处理。