【发布时间】:2014-10-15 17:46:13
【问题描述】:
我有一个 C# 控制台应用程序,运行 HttpListener,我的客户因为 CORS 而被拒绝。
如何使用我的设置将Access-Allow-All-Origins 设置为*?
listener = new HttpListener();
listener.Prefixes.Add("http://+:80/");
listener.Start();
public static void ListenerCallback(IAsyncResult result)
{
HttpListenerContext context = Program.listener.EndGetContext(result);
HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;
if (request.HttpMethod == "OPTIONS")
{
response.AddHeader("Access-Control-Allow-Headers", "*");
}
response.AppendHeader("Access-Control-Allow-Origin", "*");
System.IO.Stream stream = new System.IO.MemoryStream();
request.InputStream.CopyTo(stream);
stream.Position = 0;
NameValueCollection coll = request.QueryString;
if (String.IsNullOrEmpty(coll["name"]) || String.IsNullOrEmpty(coll["ext"]))
{
response.StatusCode = 400;
response.ContentType = "text/html";
using (StreamWriter writer = new StreamWriter(context.Response.OutputStream, Encoding.UTF8))
writer.WriteLine("Missing parameters in queryString. Send 'name' and 'ext'");
response.Close();
}
else
{
Program.nameResDictionary.Add(coll["name"] + "." + coll["ext"], response);
using (var outp = File.OpenWrite(Path.Combine(Program.inDir,coll["name"] + "." + coll["ext"])))
{
stream.CopyTo(outp);
}
toLog.Add("File " + coll["name"] + "." + coll["ext"] + " added");
}
stream.Close();
request.InputStream.Close();
listener.BeginGetContext(new AsyncCallback(ListenerCallback), listener);
}
【问题讨论】:
-
@AlexeiLevenkov 添加代码
-
您的代码似乎尝试在 OPTIONS 上设置标题两次,并可能为 OPTIONS 做更多的事情...我会使用 Fiddler 并观察来自您的服务器的响应是否有意义...还要检查是否浏览器在调试控制台中显示任何内容...
标签: c# cors httplistener