如何防止JSON Web服务响应下载到文件?

B. *_*non 1 xml rest wcf json web-services

我有一些几乎相同的WCF服务代码,除了一个方法应该返回一个xml结果,另一个方法是一个json结果:

[ServiceContract]
public interface IRestServiceImpl
{
    [OperationContract]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Xml,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "xml/{id}")]
    string XMLData(string id);

    [OperationContract]
    [WebInvoke(Method = "GET",
        ResponseFormat = WebMessageFormat.Json,
        BodyStyle = WebMessageBodyStyle.Wrapped,
        UriTemplate = "json/{id}")]
    string JSONData(string id);
}
Run Code Online (Sandbox Code Playgroud)

xml工作正常(例如,当我在浏览器中输入" http:// localhost:4841/RestServiceImpl.svc/xml/2468 "时).

但是,当我输入" http:// localhost:4841/RestServiceImpl.svc/json/2468 "时,我得到一个" 文件下载 - 安全警告 "对话框,它允许我保存文件(在这种情况下名为"2468") ,在记事本中打开时包含以下内容:

{"JSONDataResult":"您请求了产品2468"}

这是"按设计"(将json结果保存到文件中),还是为什么它的行为与xml-o-rama不同?

gre*_*mac 5

由您的浏览器决定如何处理任何特定的Content-Type,听起来您的浏览器不知道如何处理JSON.

要检查这一点,请在使用Chrome Dev Console或Firebug(或您使用的任何浏览器中的任何等效内容)时,在加载该资源时查看网络请求.在标题中,您应该看到类似的内容

Content-type: application/json
Run Code Online (Sandbox Code Playgroud)

如果您这样做,问题是您的浏览器.如果你没有看到,你的服务器或服务代码是错误的(特别是如果它application/octet-stream是mime类型相当于"我不知道").

至于浏览器,我个人推荐Chrome +这个用于显示格式化JSON输出的优秀插件:https://github.com/callumlocke/json-formatter