根据文档,在新版本的ServiceStack中,我的AppHost中应该设置默认内容类型(我猜字符串" application / json",因为这没有记录)类:
public override void Configure(Container container) {
SetConfig(new HostConfig { DefaultContentType = "application/json" });
}
这对我不起作用。如果我返回如下结果:
return new HttpResult(new MyClass(2, new float[2]{0.0f, 0.4f}), "application/json");
它正确返回json-formattet输出,但如果我这样做
return new HttpResult(new MyClass(2, new float[2]{0.0f, 0.4f}));
没有。我希望它输出json。 我做错了什么?
答案 0 :(得分:3)
我猜字符串" application / json",因为这没有记录
您可以使用字符串application/json
,也可以使用常量MimeTypes.Json
。但JSON是默认的内容类型。
但是,您没有收到JSON回复,因为您没有明确设置内容类型标头,因为ServiceStack将尊重浏览器的Accept
请求标头。因此,当您从浏览器发出请求时,它会默认请求text/html
。哪个ServiceStack会响应。
你有一些选择,你可以:
在方法代码中明确设置返回类型,就像在示例代码中一样。或者使用AddHeader
属性:
[AddHeader(ContentType=MimeTypes.Json)]
public MyResponse Get(MyRequest request)
{
...
使用设置的内容类型明确发出请求:
Accept: application/json
.json
附加到路线,即 /SomeAction.json
format
属性添加到查询字符串,即 /SomeAction?format=json
您可以禁用ServiceStack的HTML功能,并将默认返回类型设置为JSON:
public override void Configure(Funq.Container container)
{
SetConfig(new HostConfig {
DefaultContentType = MimeTypes.Json,
EnableFeatures = Feature.All.Remove(Feature.Html)
});
}
目前v4中存在一个错误,它会产生一个" Forbidden"目前此选项的错误。但是我通知了团队,它已经在this commit中排序了。所以这个选项应该适用于下一个版本(4.0.16)。