ServiceStack默认格式

Jar*_*rod 21 .net c# servicestack

我想将ServiceStack的默认格式设置为JSON,而不是从浏览器访问服务时通常返回的HTML格式的响应.我知道这可以通过发送?format = json参数或将Accept标头设置为application/json在每个请求中指定.有没有办法改变这一点,而不必依赖请求中的这些提示?

myt*_*thz 44

除了指定它与查询字符串格式= JSON? ,通过附加格式 .EXT到路线的终点,例如:/rockstars.json,或通过指定HTTP报头(在你的HttpClient): Accept: application/json.

否则,如果您的HttpClient未发送Accept标头,您可以在AppHost中将JSON指定为默认内容类型:

SetConfig(new HostConfig {
     DefaultContentType = MimeTypes.Json 
});
Run Code Online (Sandbox Code Playgroud)

ServiceStack中的所有配置选项都在此处设置.

从Web浏览器调用Web服务时的问题是,它们通常要求Accept: text/html而不是JSON,如果启用了ServiceSack合同,则返回HTML.

要确保返回JSON,您可能还希望禁用HTML功能:

SetConfig(new HostConfig {
    EnableFeatures = Feature.All.Remove(Feature.Html),
});
Run Code Online (Sandbox Code Playgroud)

指定响应内容类型的不同方法

否则,如果要覆盖Accept标头,可以强制服务始终使用以下任何方式返回json以自定义HTTP响应,例如:

使用过滤器(内置AddHeader):

[AddHeader(ContentType=MimeTypes.Json)]
public object Any(Request request) { ... }
Run Code Online (Sandbox Code Playgroud)

在服务中设置响应:

public object Any(Request request) 
{ 
    base.Response.ContentType = MimeTypes.Json;
    return dto;
}
Run Code Online (Sandbox Code Playgroud)

返回装饰响应:

return new HttpResult(dto, MimeTypes.Json);
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的明确解释.在框架上也做得很好. (7认同)
  • mythz,我正在使用最新的NuGet版本,我发现如果我禁用Feature.Html,并浏览到没有?format = json的服务,我会得到一个HTTP 403.如果我将?format = json添加回URL它按预期工作.思考?最新版本的Bug? (5认同)