references custom encryption class here https://ronniediaz.com/2011/01/13/quick-net-encryption-reference/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.Security;
using System.Text;
using System.Net;
using System.IO;
namespace AIS.Common
{
public static class Shared
{
//TODO: add local, dev, prd
public static string basehref { get { return HttpContext.Current.Request.ApplicationPath; } }
//TODO: change to json serialized object reference to prevent manipulation of pipe delimeters
public static string SetSecureQueryString(object o)
{
string ct = Crypto.Rijndael.Encrypt(o.ToString(), "static_or_dynamic_string");
return HttpUtility.UrlEncode(ct);
}
//TODO: change to json (same as above)
public static string SetSecureQueryString(object a, object b, object c, object d, object e, object f, object g, object h)
{
string ct = Crypto.Rijndael.Encrypt(a.ToString() + "|" + b.ToString() + "|" + c.ToString() + "|" + d.ToString() + "|" + e.ToString() + "|" + f.ToString() + "|" + g.ToString() + "|" + h.ToString(), "livestream");
return HttpUtility.UrlEncode(ct);
}
public static string GetSecureQueryString(string q)
{
try
{
//automatically decodes querystring in request
return Crypto.Rijndael.Decrypt(q, "static_or_dynamic_string");
}
catch (Exception ex)
{
return "";
}
}
//retrieves content from web url and returns as string
public static string DownloadString(string url, NetworkCredential nc=null)
{
System.Net.WebClient wc = new WebClient();
if (nc != null)
{
wc.UseDefaultCredentials = true;
wc.Credentials = nc;
}
return wc.DownloadString(url);
}
//http://mayur.gondaliya.com/programming-languages/c-sharp/samples/fetching-url-contents-into-a-string-using-httpwebrequest-72.html
//same as above function, different approach with more detail
public static string DownloadPage(string url)
{
const int bufSizeMax = 65536; // max read buffer size conserves memory
const int bufSizeMin = 8192; // min size prevents numerous small reads
StringBuilder sb;
// A WebException is thrown if HTTP request fails
try
{
// Create an HttpWebRequest using WebRequest.Create (see .NET docs)!
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = WebRequestMethods.Http.Get;
// Execute the request and obtain the response stream
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
// Content-Length header is not trustable, but makes a good hint.
// Responses longer than int size will throw an exception here!
int length = (int)response.ContentLength;
// Use Content-Length if between bufSizeMax and bufSizeMin
int bufSize = bufSizeMin;
if (length > bufSize)
bufSize = length > bufSizeMax ? bufSizeMax : length;
// Allocate buffer and StringBuilder for reading response
byte[] buf = new byte[bufSize];
sb = new StringBuilder(bufSize);
// Read response stream until end
while ((length = responseStream.Read(buf, 0, buf.Length)) != 0)
sb.Append(Encoding.UTF8.GetString(buf, 0, length));
return sb.ToString();
}
catch (Exception ex)
{
sb = new StringBuilder(ex.Message);
return sb.ToString();
}
}
//one approach using filesystem. will only work depending on permissions otherwise url parsing is needed
public static string GetCurrentPageName()
{
string spath = System.Web.HttpContext.Current.Request.Url.AbsolutePath;
System.IO.FileInfo oInfo = new System.IO.FileInfo(spath);
string spagename = oInfo.Name;
return spagename;
}
//get titlecase string
public static string GetTitleCase(object str)
{
try
{
return System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(str.ToString().ToLower());
}
catch (Exception ex)
{
Shared.HandleError(ex);
return "Other";
}
}
#region handleerror
public static void HandleError(Exception ex)
{
HandleError(ex.ToString());
}
//TODO: send error to error handler
public static void HandleError(string details)
{
SendEmail(details);
}
public static void HandleError(Page p, Exception ex)
{
HandleError(p, ex.ToString());
}
public static void HandleError(Page p, string details)
{
//MessageBox.Show(hwnd, details);
SendEmail(details);
}
//TODO: replace with call to error manager or hook to event for compatibility
public static void SendEmail(string details) {
//throw new HttpUnhandledException(details);
if (Shared.GetCurrentPageName().Replace("/", "") != "error.aspx") //TODO: remove. temporary resolution for unhandled session timeouts. PROTOTYPE
{
//HttpContext.Current.Response.Redirect("~/error.aspx");
//TODO: global error log and local
}
}
#endregion
}
}
Leave a comment