【发布时间】:2015-12-01 23:50:54
【问题描述】:
我正在尝试使用“C# 中的简单 HTTP 服务器”(http://www.codeproject.com/Articles/137979/Simple-HTTP-Server-in-C)在 C# 中创建一个 HTTP 服务器(侦听器),并使用 javascript 向它发送请求。
这就是代码的样子:
The HandleRequest function in c#:
public override void handleGETRequest(HttpProcessor p)
{
p.httpHeaders.Add("Access-Control-Allow-Origin", "*");
if (p.http_url.Equals("/test"))
{
p.outputStream.Write("Test accomplished");
Console.Log("Server responded to TEST request successfully");
return;
}
if (p.http_url.StartsWith("/goto"))
{
string[] args = p.http_url.Split('/');
//x - [2]
//y - [3]
//z - [4]
//f - [5]
myPrinter.SendCommand(string.Format("G1X{0}Y{1}F10000", args[2], args[3]));
p.outputStream.Write("response succeeded");
Console.Log("goto command was executed");
}
if (p.http_url.StartsWith("/commandlist"))
{
string[] args = p.http_url.Split('/');
//[2] - commands
string[] commands = args[2].Split('$');
for (int i = 0; i < commands.Length; i++)
{
myPrinter.commands.Add(commands[i]);
}
//myPrinter.HandleCommandList();
p.outputStream.Write("response succeeded");
Console.Log("goto command was executed");
}
if (p.http_url.StartsWith("/execute"))
{
p.outputStream.Write("Executing " + myPrinter.commands.Count + " commands\n");
myPrinter.HandleCommandList();
}
}
在JS中发送的请求是这样的:
function sendGCODE() {
var xmlhttp = new XMLHttpRequest();
var url = "http://localhost:1300/commandlist/" + document.getElementById("Text1").value;
xmlhttp.onreadystatechange = function () {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var myArr = xmlhttp.responseText;
myFunction(myArr);
}
};
xmlhttp.open("GET", url, true);
xmlhttp.send();
function myFunction(arr) {
alert('Response received');
document.getElementById("resultP").innerHTML = arr;
}
}
但是当我尝试从 JS 代码发送请求时,它只是告诉我缺少“Access-Control-Allow-Origin”标头,因此无法发送请求。我在 handleGETRequest() 函数的开头添加了该标题:
public override void handleGETRequest(HttpProcessor p)
{
p.httpHeaders.Add("Access-Control-Allow-Origin", "*");
那么为什么它不起作用?服务端软件没有报错,但是JS代码还是因为缺少header而心烦。
我做错了什么?谢谢! (其余的服务器端代码在上面的链接中)
【问题讨论】:
-
能否使用 Fiddler(或浏览器开发工具)检查响应是否包含标头?
标签: javascript c# xmlhttprequest