使用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在这些情况下采用特定的内容类型?
答案 0 :(得分:2)
请参阅此答案,了解如何在ServiceStack中设置默认内容类型:ServiceStack default format
您可以使用Request Filter检测所请求的内容类型:
httpReq.ResponseContentType
在您的全局请求过滤器中,您可以选择允许它(不执行任何操作)或直接写入响应,例如406,您可以根据需要列出支持的内容。
Implementation architecture diagram显示ServiceStack中发生的操作顺序的视觉提示。其中:
EndointHostConfig.RawHttpHandlers
在其他任何事情之前执行,即完全返回任何ASP.NET IHttpHandler
绕过ServiceStack。IAppHost.PreRequestFilters
每当您在任何过滤器中关闭响应时,即httpRes.Close()
响应的处理都会被短路,并且不会对该请求进行进一步处理。