c# - ServiceStack 默认格式

标签 c# .net servicestack

我想将 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/

相关文章:

c# - 我可以定义一个方法来接受 Func<T> 或 Expression<Func<T>> 吗?

c# - 如何在 c# .net web 应用程序中获取特定的资源字符串而不考虑当前的文化

web-services - 在没有管理权限的情况下运行 ServiceStack 自托管应用程序

servicestack - 添加到 ExportTypes 时不在 DTO 上生成指定类型

c# - 在 Visual Studio 中使用参数 Access 查询

c# - 属性如何继承?

c# - ASP.NET Membership 获取登录用户

c# - 如何使 IObservable<T> 的实现成为多线程的?

redis - 如何在 ServiceStack RedisClient 中组合多个 IRedisTypedTransaction<T>

c# - 无法将派生类型隐式转换为其基本泛型类型