使用EventStore HTTP API获取持久化订阅事件返回XML而非JSON求助
排查EventStore HTTP API返回XML而非JSON的问题
调用EventStore HTTP API获取持久化订阅事件时,请求可正常执行,但返回结果为XML格式,而非预期的JSON格式。
请求信息
> GET /subscriptions/integration-2023-05-31/Test1_Subscription HTTP/2 > Host: [removed].germanywestcentral.cloudapp.azure.com:2113 > user-agent: insomnia/2023.2.2 > content-type: application/vnd.eventstore.competingatom+json > authorization: Basic [removed] > accept: */*
响应信息
HTTP/2 200 < content-type: application/vnd.eventstore.competingatom+xml; charset=utf-8 < date: Wed, 31 May 2023 13:14:01 GMT < server: Kestrel < access-control-allow-headers: Content-Type, X-Requested-With, X-Forwarded-Host, X-Forwarded-Prefix, X-PINGOTHER, Authorization, ES-LongPoll, ES-ExpectedVersion, ES-EventId, ES-EventType, ES-RequireMaster, ES-RequireLeader, ES-HardDelete, ES-ResolveLinkTos < access-control-allow-methods: PUT, POST, DELETE, GET, GET, OPTIONS < access-control-allow-origin: * < access-control-expose-headers: Location, ES-Position, ES-CurrentVersion < content-length: 2033
问题原因
你误用了Content-Type头来指定期望的响应格式,但GET请求的Content-Type头不影响响应格式——这个头仅用于告知服务器你发送的请求体类型,而GET请求通常没有请求体。
EventStore的Competing Atom API依赖Accept头协商响应格式,当Accept设为*/*时,服务器会默认返回XML格式。
解决方案
将请求的Accept头修改为application/vnd.eventstore.competingatom+json,同时可以移除不必要的Content-Type头(GET请求无需该头),修改后的请求头如下:
> GET /subscriptions/integration-2023-05-31/Test1_Subscription HTTP/2 > Host: [removed].germanywestcentral.cloudapp.azure.com:2113 > user-agent: insomnia/2023.2.2 > authorization: Basic [removed] > accept: application/vnd.eventstore.competingatom+json
修改后,服务器会根据Accept头返回JSON格式响应,响应的Content-Type也会变为application/vnd.eventstore.competingatom+json。
内容的提问来源于stack exchange,提问作者Sebastian Schabbach
相关产品推荐
相关产品推荐

