如何让我的服务器(AWS EC2)在C#中将.html文件作为html发送?

时间:2015-05-17 00:03:54

标签: c# html amazon-web-services amazon-ec2 server

我使用Amazon Web Service的EC2虚拟机设置了服务器。

我的服务器应用程序是用C#编写的。

目前,我用JavaScript编写的游戏可以在向高分榜请求数据时将数据发送到服务器并接收JSON对象。这一切都很好。

我决定尝试从服务器托管我的游戏。但是出于某种原因,如果您请求index.html文件,客户端浏览器解释的是原始文本。正如您在此处看到的那样(http://i.imgur.com/uE9zOaA.png),它将index.html文件显示为文本,它只是将其放在客户端正文的“pre”标记下。

我原本以为这是一个安全问题,但我无法在我的EC2实例的安全性中找到任何不允许它的内容。此外,当我通过Visual Studio使用localhost:8080托管它时,我有同样的事情,这让我相信它在我的代码中。

另外,值得添加我通过我的注册表并确保所有.html内容都是“text / html”类型。

在C#中,在确定用户尝试请求的内容(我知道它可以工作,因为它确实获取了正确的html文件)之后,它调用了以下方法。

private static Response IndexRequest()
    {
        String file = "C:\\Game\\index.html";
        FileInfo fi = new FileInfo(file);
        FileStream fs = fi.OpenRead();
        BinaryReader reader = new BinaryReader(fs);
        Byte[] d = new Byte[fs.Length];
        reader.Read(d, 0, d.Length);
        fs.Close();

        return new Response("Play", "text/html", d);
    }

此方法实质上读取index.html文件并将其更改为用于发送的字节数组,然后返回状态为Play的对象,类型为“text / html”,其中包含该数组。

什么调用该方法接收具有该数据的对象Response。然后告诉该对象响应它的post方法,如下所示。

public void Post(NetworkStream stream) {
        StreamWriter writer = new StreamWriter(stream);
        writer.WriteLine(String.Format("{0} {1}\r\nServer: {2}\r\nContent-Type: {3}\r\nAccept-Ranges: bytes\r\nContent-Length: {4}\r\n",
            HTTPServer.VERSION, status, HTTPServer.NAME, mime, data.Length));

        stream.Write(data, 0, data.Length);
    }

其中 HTTPServer.VERSION ==“HTTP / 1.1”, HTTPServer.NAME =“HarbourGuide HTTP Server V0.1” 和status / mime / data是作为第一种方法的参数返回的三件事(在本例中为“Play”,“text / html”,index.html的数据为bbyte数组。

正如我所说,这导致客户端以文本形式接收数据。将mime更改为“html”不起作用。

非常感谢任何帮助。谢谢。

0 个答案:

没有答案