/// <summary> /// A void function called whenever a response has been received. /// </summary> /// <param name="req">The request object.</param> /// <param name="resp">The response object.</param> /// <param name="log">A logger representing the log.</param> private void TestRESTAPI_ResponseReceived(System.Net.HttpListenerRequest req, System.Net.HttpListenerResponse resp, Logger log) { log.Log(LogLevel.INFORMATION, "REST ApiTest: Got request, responding"); MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes("{\"success\": \"true\"}")); ms.CopyTo(resp.OutputStream); ms.Close(); resp.Close(); }
static void ResponseWrite(string type, string msg, System.Net.HttpListenerResponse response) { response.ContentType = "application/json;charset=UTF-8"; response.AddHeader("Content-type", "application/json");//添加响应头信息 response.Headers.Add("Access-Control-Allow-Origin", "*"); response.ContentEncoding = Encoding.UTF8; response.StatusCode = 200; response.StatusDescription = "200"; byte[] buffer = System.Text.Encoding.UTF8.GetBytes(msg); response.ContentLength64 = buffer.Length; System.IO.Stream output = response.OutputStream; output.Write(buffer, 0, buffer.Length); output.Close(); response.Close(); }
static void Main(string[] args) { try { System.Net.HttpListener server = new System.Net.HttpListener(); // Address, Port を指定 server.Prefixes.Add("http://localhost:8000/"); // サーバ起動 server.Start(); while (true) { // 接続待ち System.Net.HttpListenerContext context = server.GetContext(); // 応答作成 System.Net.HttpListenerResponse response = context.Response; // JavaScriptエラー回避 response.Headers.Add("Access-Control-Allow-Origin", "*"); bool readSuccess = false; byte[] idm = null; if (System.Text.RegularExpressions.Regex.IsMatch(context.Request.Url.ToString(), "http://localhost:8000/getIDmDummy\\?seed=.*")) { // 疑似IDm生成 idm = IDmDummy(context.Request.QueryString.Get("seed")); readSuccess = true; Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}]\t疑似IDm生成"); } else { try { // NFC読み込み Felica felica = new Felica(); felica.Polling((int)SystemCode.FelicaLiteS); idm = felica.IDm(); felica.Dispose(); readSuccess = true; Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}]\tカード読み取り成功"); } catch { Console.WriteLine($"[{DateTime.Now.ToString("HH:mm:ss")}]\tカード読み取り失敗"); } } if (readSuccess) { // 読み取り成功 string idm_str = BitConverter.ToString(idm).Replace("-", "").ToLower(); idm = Encoding.UTF8.GetBytes(idm_str); response.StatusCode = 200; response.OutputStream.Write(idm, 0, idm.Length); response.Close(); } else { // 読み取り失敗 response.StatusCode = 500; response.Close(); } } } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public void Run() { if (!IsConnectedToInternet()) { System.Console.WriteLine("Not connected to a network"); return; } bool useLocalIP = true; if (!TryConnectLocalIP()) { useLocalIP = false; System.Console.WriteLine("Could not connect through local IP address"); } System.Console.WriteLine("Connect using {0}", baseUrl.TrimEnd('/')); if (useLocalIP) { System.Console.WriteLine("Connect using {0}", ExternalUrl.TrimEnd('/')); } using (var listener = new System.Net.HttpListener()) { listener.Prefixes.Add(baseUrl); if (useLocalIP) { listener.Prefixes.Add(ExternalUrl); } listener.Start(); while (true) { System.Net.HttpListenerContext ctx = listener.GetContext(); System.Net.HttpListenerRequest request = ctx.Request; System.Console.WriteLine(request.Url); System.Net.HttpListenerResponse response = ctx.Response; string urlString = request.Url.ToString(); string rawUrl = request.RawUrl.ToString(); string responseText = null; byte[] reponseBuffer = null; if (rawUrl == root) { responseText = defaultPage; responseText = responseText.Replace(baseUrl, urlString + "/"); response.ContentType = "text/HTML"; } else if (rawUrl.StartsWith(WebService.resourcePrefix)) { string resourceName = rawUrl.Remove(0, WebService.resourcePrefix.Length); if (rawUrl.EndsWith(".jpg")) { reponseBuffer = Program.GetEmbeddedContentAsBinary(resourceName); response.ContentType = System.Net.Mime.MediaTypeNames.Image.Jpeg; } else { responseText = Program.GetEmbeddedContent(resourceName); response.ContentType = "text/css"; } } else if (rawUrl.StartsWith(root + "/")) { var streamReader = new System.IO.StreamReader(request.InputStream, request.ContentEncoding); var jsonRequest = streamReader.ReadToEnd(); string requestedPage = rawUrl.Remove(0, (root + "/").Length); object unserializedObject = null; Type serviceType; if (mapNameToServiceType.TryGetValue(requestedPage, out serviceType)) { unserializedObject = js.Deserialize(jsonRequest, serviceType); if (unserializedObject == null) { unserializedObject = Activator.CreateInstance(serviceType); } } else { System.Console.WriteLine("Unrecognized Service"); } if (unserializedObject is IRequestWithHtmlResponse) { responseText = ((IRequestWithHtmlResponse)unserializedObject).GetResponse(this); } else if (unserializedObject is IRequestWithJsonResponse) { object o = ((IRequestWithJsonResponse)unserializedObject).GetResponse(this); var serialized = js.Serialize(o); responseText = serialized; } response.ContentType = "text/html"; } if (response.ContentType != null && response.ContentType.StartsWith("text") && responseText != null) { response.ContentEncoding = System.Text.UTF8Encoding.UTF8; reponseBuffer = System.Text.Encoding.UTF8.GetBytes(responseText); } if (reponseBuffer != null) { //These headers to allow all browsers to get the response response.Headers.Add("Access-Control-Allow-Credentials", "true"); response.Headers.Add("Access-Control-Allow-Origin", "*"); response.Headers.Add("Access-Control-Origin", "*"); //response.StatusCode = 200; //response.StatusDescription = "OK"; // Get a response stream and write the response to it. response.ContentLength64 = reponseBuffer.Length; System.IO.Stream output = response.OutputStream; output.Write(reponseBuffer, 0, reponseBuffer.Length); output.Close(); } response.Close(); } } }