2012-09-07 112 views
2

registered a new content type在ServiceStack有:如何更改ServiceStack中的默認ContentType?

appHost.ContentTypeFilters.Register("application/x-my-content-type", 
    SerializeToStream, DeserializeFromStream); 

而且一切正常,如果客戶端發送的HTTP流中的內容類型。

不幸的是,我有一個客戶端不在我的HTTP請求頭控制之內,並且不發送內容類型。

如何獲取ServiceStack以設置該路由的默認內容類型?

回答

9

在每個ServiceStack /metadata page列出了不同的方式,客戶端可以請求特定的內容類型:

要覆蓋內容類型在您的客戶端的HTTP 接受頭,附加格式= XML?或添加。 格式擴展名

例如, ?

接受::應用程序/ x-我的 - 客戶端可以與格式= X-MY-內容類型,加入延伸或通過指定HTTP報頭(在HttpClient的)指定的自定義的ContentType內容類型

否則,如果您的HttpClient不發送Accept頭,你可以在你的APPHOST與指定默認的內容類型:

SetConfig(new HostConfig { 
    DefaultContentType = "application/x-my-content-type" 
}); 

注意:ServiceStack中的所有配置選項均設置爲HostConfig

從Web瀏覽器調用Web服務時的問題是,它們通常會要求Accept: text/html,如果ServiceStack已啓用,則通過合約ServiceStack返回HTML來承擔責任。

爲了確保您的內容類型,總是返回您可能還需要禁用與HTML功能:

SetConfig(new HostConfig { 
    EnableFeatures = Feature.All.Remove(Feature.Html), 
}); 

否則,如果你想重寫接受頭,你可以強迫你的服務總是返回您的ContentType通過裝飾你的反應DTO一個HttpResult內,即:

return new HttpResult(dto, "application/x-my-content-type"); 

否則外面您的服務(如請求/響應濾波器),你可以在任何地方設置響應的ContentType塔的任何地方t有權訪問IHttpRequest

httpReq.ResponseContentType = "application/x-my-content-type"; 
相關問題