using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using System.Runtime.InteropServices; namespace ServerLib { public static class ResponseHelper { public static HttpResponse FromFile(this HttpResponse response, string fileName) { if (!File.Exists(fileName)) { response.SetContent("

404 - Not Found

"); response.StatusCode = "404"; response.Content_Type = "text/html"; return response; } var content = File.ReadAllBytes(fileName); var contentType = GetMimeFromFile(fileName); response.SetContent(content); response.Content_Type = contentType; response.StatusCode = "200"; return response; } public static HttpResponse FromXML(this HttpResponse response, string xmlText) { response.SetContent(xmlText); response.Content_Type = "text/xml"; response.StatusCode = "200"; return response; } public static HttpResponse FromXML(this HttpResponse response, T entity) where T : class { return response.FromXML(""); } public static HttpResponse FromJSON(this HttpResponse response, string jsonText) { response.SetContent(jsonText); response.Content_Type = "text/json"; response.StatusCode = "200"; return response; } public static HttpResponse FromJSON(this HttpResponse response, T entity) where T : class { return response.FromJSON(""); } public static HttpResponse FromText(this HttpResponse response, string text) { response.SetContent(text); response.Content_Type = "text/plain"; response.StatusCode = "200"; return response; } private static string GetMimeFromFile(string filePath) { IntPtr mimeout; if (!File.Exists(filePath)) throw new FileNotFoundException(string.Format("File {0} can't be found at GameLogic.", filePath)); int MaxContent = (int)new FileInfo(filePath).Length; if (MaxContent > 4096) MaxContent = 4096; byte[] buf = new byte[MaxContent]; using (FileStream fs = File.OpenRead(filePath)) { fs.Read(buf, 0, MaxContent); fs.Close(); } int result = FindMimeFromData(IntPtr.Zero, filePath, buf, MaxContent, null, 0, out mimeout, 0); if (result != 0) throw Marshal.GetExceptionForHR(result); string mime = Marshal.PtrToStringUni(mimeout); Marshal.FreeCoTaskMem(mimeout); return mime; } [DllImport("urlmon.dll", CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false)] static extern int FindMimeFromData(IntPtr pBC, [MarshalAs(UnmanagedType.LPWStr)] string pwzUrl, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1, SizeParamIndex = 3)] byte[] pBuffer, int cbSize, [MarshalAs(UnmanagedType.LPWStr)] string pwzMimeProposed, int dwMimeFlags, out IntPtr ppwzMimeOut, int dwReserved); } }