当我调用REST方法时,它会询问我是否要下载文件

时间:2010-09-29 22:19:14

标签: c# wcf rest iis-7 windows-server-2008

我有一个简单的WCF Rest Service,有一种方法。界面定义为:

[ServiceContract]
public interface IHelloRest
{
    [OperationContract]
    [WebGet(UriTemplate = "json/hello/{name}", ResponseFormat = WebMessageFormat.Json)]
    string Hello(string name);
}

实施定义为:

public string Hello(string name)
{
   return string.Format("Hello {0}.  You called my Hello method", name);
}

我将此服务部署到在Windows Server 2008上运行的IIS 7,以下是我添加服务的步骤:

  • 我启动了IIS管理器
  • 我在网站上单击鼠标右键并选择添加网站...
  • 我为网站名称设置了“测试”
  • 对于应用程序池,我选择了ASP.NE v4.0
  • 对于物理路径,我放了我服​​务的根文件夹。
  • 对于绑定,我放了http,我保留了未分配的IP地址,我将端口保留为80.
  • 我没有提供主持人姓名
  • 我立即离开了“开始网站”。
  • 我点击确定,然后浏览到我的网站。

完成上述步骤后,我遇到了一些问题:

当我浏览http://localhost/HelloRestService.svc/json/hello/xaisoft时,它会询问我是否要下载该文件。如果我下载并打开它,它包含json格式的响应。在我的本地机器上,当我在IIS中托管它时,它工作正常,但在这台远程机器上,它只询问我是否要下载该文件。

另一个问题是我不希望主机是localhost,我想要像demo.rest.com这样的东西,所以我会浏览到http://demo.rest.com/json/hello/xaisoft,但如果我将主机更改为demo.rest .com并尝试现在浏览该服务,它试图转到:

http://demo.rest.com/HelloRestService.svc,但表示Internet Explorer无法显示网页。

1 个答案:

答案 0 :(得分:4)

这是正常的,默认的,预期的行为 - IIS和IE不知道如何处理JSON结果,所以最好的选择是提供下载文件,以便您可以存储和查看它。

JSON并非设计用于在浏览器中直接调用 - 如果您想通过浏览直接显示内容,请使用XML。

JSON旨在作为小型有效负载(例如“下载”作为一大块数据)发送回您的客户端应用程序(Web应用程序或其他),然后由Javascript解释并转换为HTML标记(通常)。 / p>

所以我认为这里没有任何问题 - 如果事情很奇怪,那么事实上,在你的本地系统上,它的工作“很好”(这甚至真正意味着什么?会发生什么?)< / p>