我已经注册了一个新的内容类型在ServiceStack有:
appHost.ContentTypeFilters.Register("application/x-my-content-type",
SerializeToStream, DeserializeFromStream);
而且一切正常,如果客户端发送的HTTP流中的内容类型。
不幸的是,我有一个客户,是不是在我的HTTP请求头的控制和不发送的内容类型。
我怎样才能得到ServiceStack来设置该路由的默认内容类型?
在每一个ServiceStack /元数据页中列出了不同的方式,客户端可以请求特定的内容类型:
要覆盖内容类型在您的客户端的HTTP 接受头,加上?格式= XML或添加。 格式扩展名
例如,客户端可以指定自定义格式的ContentType = X-我的内容类型 ,加入? .x-my-content-type
扩展名或通过指定的HTTP标头(在HttpClient的):
接受:应用程序/ x-MY-内容类型
否则,如果您的HttpClient不发送Accept头,你可以在你的APPHOST指定默认的内容类型:
SetConfig(new HostConfig {
DefaultContentType = "application/x-my-content-type"
});
注:ServiceStack所有配置选项都设定HostConfig
。
从Web浏览器调用Web服务时的问题是,它们通常要求Accept: text/html
该合同ServiceStack责成由如果启用了回返回HTML。
为了确保您的内容类型,总是返回您可能还需要与禁用HTML功能:
SetConfig(new HostConfig {
EnableFeatures = Feature.All.Remove(Feature.Html),
});
否则,如果你想覆盖Accept头可以迫使你的服务总是由装饰您回应DTO一个HttpResult,即内部回报您的Content-Type:
return new HttpResult(dto, "application/x-my-content-type");
否则,任何地方您的服务(如请求/响应滤波器)外,你可以在任何地方设置响应的ContentType可以访问一个IHttpRequest
有:
httpReq.ResponseContentType = "application/x-my-content-type";