你怎么能更改ServiceStack默认的ContentType?(How can you chan

2019-06-28 00:11发布

我已经注册了一个新的内容类型在ServiceStack有:

appHost.ContentTypeFilters.Register("application/x-my-content-type", 
   SerializeToStream, DeserializeFromStream);

而且一切正常,如果客户端发送的HTTP流中的内容类型。

不幸的是,我有一个客户,是不是在我的HTTP请求头的控制和不发送的内容类型。

我怎样才能得到ServiceStack来设置该路由的默认内容类型?

Answer 1:

在每一个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";


文章来源: How can you change the default ContentType in ServiceStack?