如何在ServiceStack版本4中设置defaultcontentype

时间:2014-03-28 16:46:56

标签: servicestack

根据文档,在新版本的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。 我做错了什么?

1 个答案:

答案 0 :(得分:3)

  

我猜字符串" application / json",因为这没有记录

您可以使用字符串application/json,也可以使用常量MimeTypes.Json。但JSON是默认的内容类型。

但是,您没有收到JSON回复,因为您没有明确设置内容类型标头,因为ServiceStack将尊重浏览器的Accept请求标头。因此,当您从浏览器发出请求时,它会默认请求text/html。哪个ServiceStack会响应。

你有一些选择,你可以:

  1. 在方法代码中明确设置返回类型,就像在示例代码中一样。或者使用AddHeader属性:

    [AddHeader(ContentType=MimeTypes.Json)]
    public MyResponse Get(MyRequest request)
    {
       ...
    
  2. 使用设置的内容类型明确发出请求:

    • 设置接受标头 Accept: application/json
    • .json附加到路线,即 /SomeAction.json
    • format属性添加到查询字符串,即 /SomeAction?format=json

  3. 您可以禁用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)。