我想将 ServiceStack 的默认格式设置为 JSON,而不是它通常在从浏览器访问服务时返回的 HTML 格式的响应。我知道这可以通过发送 ?format=json 参数或将 Accept header 设置为 application/json 来在每个请求上指定。有没有一种方法可以更改此设置而不必依赖请求中的这些提示?
最佳答案
除了用 ?format=json 在 QueryString 上指定它之外,by appending the format .ext 到路线的末尾,例如:/rockstars.json ,或通过指定 HTTP header (在您的 HttpClient 中):Accept: application/json
。
否则,如果您的 HttpClient 不发送 Accept header ,您可以将 JSON 指定为 AppHost 中的默认内容类型:
SetConfig(new HostConfig {
DefaultContentType = MimeTypes.Json
});
ServiceStack 中的所有配置选项都在这里设置。
从 Web 浏览器调用 Web 服务时的问题是,它们通常要求 Accept: text/html
而不是 JSON,根据契约(Contract) ServiceStack 必须返回 HTML(如果启用)。
为确保返回 JSON,您可能还想禁用 HTML 功能:
SetConfig(new HostConfig {
EnableFeatures = Feature.All.Remove(Feature.Html),
});
指定响应内容类型的不同方式
否则,如果您想覆盖 Accept header ,您可以强制您的服务始终使用这些方式中的任何一种返回 json 到 Customize the HTTP Response ,例如:
使用过滤器(AddHeader 是内置的):
[AddHeader(ContentType=MimeTypes.Json)]
public object Any(Request request) { ... }
在服务中设置响应:
public object Any(Request request)
{
base.Response.ContentType = MimeTypes.Json;
return dto;
}
返回装饰响应:
return new HttpResult(dto, MimeTypes.Json);
关于c# - ServiceStack 默认格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10317225/