使用ServiceStack 3.9.2x。
开箱即用(如元数据页面所示)服务堆栈提供了对一系列内容类型的内置支持- xml、json、jsv等。告诉ServiceStack限制受支持内容集的最佳方式是什么?例如,我的服务只知道如何使用JSON,并且我不希望ServiceStack接受带有"Content-type: application/xml“或"Accept: application/xml”头的请求。在上述情况下,我希望ServiceStack以406 (不可接受)响应响应,理想情况下在正文中包含受支持的内容集(根据HTTP1.1规范)。
另外,对于没有显示Accept或Content-Type头的请求,ServiceStack如何确定默认的内容类型(我想我现在看到它呈现超文本标记语言了)?在这些情况下,有没有办法告诉ServiceStack采用特定的内容类型?
发布于 2012-11-06 04:48:38
请参阅此答案以了解如何在ServiceStack中设置默认内容类型:ServiceStack default format
您可以使用Request Filter通过以下方式检测所请求的内容类型:
httpReq.ResponseContentType在你的全局请求过滤器中,你可以选择允许它(什么都不做)或者直接写到响应中,例如406和你想要的支持内容列表。
ServiceStack操作顺序
Implementation architecture diagram显示了ServiceStack中发生的操作顺序的可视提示。其中:
EndointHostConfig.RawHttpHandlers在任何事情之前执行,例如,返回任何completely.IHttpHandler旁路,并在请求DTO is executedIAppHost.PreRequestFilters 优先级<0之前执行 get any Global Request Filters get only)IAppHost.PreRequestFilters Request Filters (仅限新请求筛选器)>=IAppHost.PreRequestFiltersFilters by <>C32IAppHost.PreRequestFilters> with <E133>Priority< 0 无论何时关闭任何过滤器中的响应,例如httpRes.Close(),响应的处理都是短路的,并且不会对该请求进行进一步的处理。
https://stackoverflow.com/questions/13239307
复制相似问题