Posts Tagged C#
How to get the week number for a date in C#
Posted by suddenelfilio in .net, OS, Programming, Visual Studio .Net, Windows on 07/10/2010
Today I needed to know which week of the year a certain day was in. My first instinct was DateTime.Now.Week but it seems there is no Week property on a DateTime instance. So I started looking for a way to get the week number. As it turns out the CultureInfo class will get you where you want to go using the Calendar property.
I updated my extensions library (How to get the mime type of a file using the name of a file in C# and PART 2: How to get the mime type of a file using the name of a file in C# ) to add an extension method called WeekNumber for a DateTime instance here is the code:
public static class DateTimeExtensions
{
public static int WeekNumber(this System.DateTime value)
{
return CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(value, CalendarWeekRule.FirstFourDayWeek,
DayOfWeek.Monday);
}
}
You can download my updated extension library here : Suddenelfilio.ExtensionMethods.zip
Downloaded 204 times
Connect to Facebook using ASP.NET, Facebook Graph API & Hammock
Posted by suddenelfilio in .net, Asp.net, Programming, Web & Design on 08/09/2010
UPDATE: Hammock moved to github https://github.com/danielcrenna/hammock
A while ago I wrote a post on how to perform oAuth authentication against the LinkedIn API using Hammock. Today I want to show you how to use Hammock with the Facebook Graph API. The Graph API is a new way a developer can read and write data to Facebook. Facebook uses oAuth 2.0 which is a simpler version of the oAuth authentication I used in my previous article with LinkedIn. It uses SSL instead of relying on the URL signature schemes and token exchanges you see in oAuth 1.x
There are 3 steps:
- Redirect the visitor to the authorization page over at Facebook.com
- Handle the callback from Facebook.com
- Get an access_token from Facebook.com using the code parameter returned by Facebook.com in step 2
For more information about the exact details on authorization in the Graph API go to: http://developers.facebook.com/docs/api
So let’s begin. I created a Web application in Visual Studio .Net 2010 that looks like this:
As you can see there is not much on the page except for a button, an empty image and some text with “Unknown” values. The goal is that when your visitor clicks the “Connect to Facebook” button he/she gets redirect to Facebook.com to authorize your application and then you can get the profile picture, name and the visitor’s about text he/she filled in on Facebook.
When the visitor clicks the “Connect to Facebook” the following code is executed:
protected void Button1_Click(object sender, EventArgs e)
{
string callbackUrl = "http://localhost/FacebookConnectWithHammock/";
//Request offline access and publish to the users stream access.
Response.Redirect(string.Format("https://graph.facebook.com/oauth/authorize?client_id={0}&redirect_uri={1}&scope=offline_access,publish_stream", ConfigurationManager.AppSettings["FacebookClientId"], callbackUrl));
}
What this does is it will redirect the visitor to facebook to the authorization page. This specific authorization request asks foor “offline_access” and “publish_stream” rights. This means that the application can access your Facebook account while you are offline and it can also publish updates to your Facebook account. Other parameters are the “client_id” which you need to set to your application’s client id that was assigned to your application when you created it and the “redirect_uri” which tells Facebook where to redirect the visitor after he/she granted your application access. When this is the first time the visitor is authorizing your application he/she will see the following authorization page:
When the visitors clicks on the “Allow” button Facebook will redirect the visitor back to the “redirect_uri” parameter. Then arriving on the web server we will receive a code parameter that we need to use to get the access_token. Here is how the callback code looks:
First in the Page_Load we check if the current request is a callback from Facebook by verifying if the Request["code"] querystring parameter is not null or empty and when it is not we call the callback handling code:
protected void Page_Load(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(Request["code"]) && !Page.IsPostBack)
{
HandleFacebookCallback();
}
}
The HandleFacebookCallback method will use the “code” parameter to get an access token and then call the DisplayUserInformation method passing the received token. The DisplayUserInformation will make a request to the Graph API requesting information about the visitor that just authorized the application. It will show the profile picture, name of the visitor and the about text that is filled in on his/hers Facebook profile.
private void HandleFacebookCallback()
{
string CallbackUrl = "http://localhost/FacebookConnectWithHammock/";
var client = new RestClient { Authority = "https://graph.facebook.com/oauth/" };
var request = new RestRequest { Path = "access_token" };
request.AddParameter("client_id", ConfigurationManager.AppSettings["FacebookClientId"]);
request.AddParameter("redirect_uri", CallbackUrl);
request.AddParameter("client_secret", ConfigurationManager.AppSettings["FacebookApplicationSecret"]);
request.AddParameter("code", Request["code"]);
RestResponse response = client.Request(request);
// A little helper to parse the querystrings.
StringDictionary result = ParseQueryString(response.Content);
string aToken = result["access_token"];
DisplayUserInformation(aToken);
}
private void DisplayUserInformation(string sToken)
{
var client = new RestClient { Authority = "https://graph.facebook.com/" };
var request = new RestRequest { Path = "me" };
request.AddParameter("access_token", sToken);
RestResponse response = client.Request(request);
JavaScriptSerializer ser = new JavaScriptSerializer();
var parsedResult = ser.Deserialize<FacebookUser>(response.Content);
ProfilePic.ImageUrl = string.Format("http://graph.facebook.com/{0}/picture?type=large",parsedResult.id);
NameLabel.Text = parsedResult.name;
AboutLabel.Text = parsedResult.about;
}
When all goes well it should a little like the picture below.
Okay the formatting may not be optimal, but you get the point on how you can use Hammock to interact with the Facebook Graph API.
You can download the sample code here: Download
Downloaded 1751 times
NOTE: if you want to use the sample you will need to create an application first to get your application client id and secret. For more on this go to: http://www.facebook.com/developers/
PART 2: How to get the mime type of a file using the name of a file in C#
Posted by suddenelfilio in Visual Studio .Net on 31/08/2010
Following up on a comment that was posted in my previous post I updated my library to first look in a hard coded list of extensions to see if I can find a corresponding mime type. I must admit that I got a bit inspired by the article Getting MIME types from extension by Pieter Joost van de Sande. I did however updated it to be more .net 4.0 by using the new Lazy<> which lets you do lazy loading. I also replaced the HashTable by a SortedDictionary<string,string>
So the code I used to look up the mime type has changed to this:
string fileExtension = System.IO.Path.GetExtension(fileName).ToLower();
var valueInTable = MimeTypeTable.MimeTypes.Value[fileExtension];
if (valueInTable != null)
return valueInTable as string;
Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(fileExtension);
if (rk != null && rk.GetValue("Content Type") != null)
return rk.GetValue("Content Type").ToString();
return null;
As you can see I now do a lookup in the MimeTypeTable and if I have no result only then I’ll go into the registry to try having better luck there. Here is the implementation of the MimeTypeTable class (beware it’s quite long) also the download of the new library is at the end of this post:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Suddenelfilio.ExtensionMethods.IO
{
internal sealed class MimeTypeTable
{
internal static Lazy<SortedDictionary<string, string>> MimeTypes
{
get
{
return new Lazy<SortedDictionary<string,string>>(() => LoadTable(), true);
}
}
private static SortedDictionary<string, string> LoadTable()
{
SortedDictionary<string, string> types = new SortedDictionary<string, string>(StringComparer.InvariantCultureIgnoreCase);
types.Add(".3dm", "x-world/x-3dmf");
types.Add(".3dmf", "x-world/x-3dmf");
types.Add(".aab", "application/x-authorware-bin");
types.Add(".aam", "application/x-authorware-map");
types.Add(".aas", "application/x-authorware-seg");
types.Add(".abc", "text/vnd.abc");
types.Add(".acgi", "text/html");
types.Add(".afl", "video/animaflex");
types.Add(".ai", "application/postscript");
types.Add(".aif", "audio/aiff");
types.Add(".aifc", "audio/aiff");
types.Add(".aiff", "audio/aiff");
types.Add(".aim", "application/x-aim");
types.Add(".aip", "text/x-audiosoft-intra");
types.Add(".ani", "application/x-navi-animation");
types.Add(".aos", "application/x-nokia-9000-communicator-add-on-software");
types.Add(".aps", "application/mime");
types.Add(".art", "image/x-jg");
types.Add(".asf", "video/x-ms-asf");
types.Add(".asm", "text/x-asm");
types.Add(".asp", "text/asp");
types.Add(".asx", "application/x-mplayer2");
types.Add(".au", "audio/x-au");
types.Add(".avi", "video/avi");
types.Add(".avs", "video/avs-video");
types.Add(".bcpio", "application/x-bcpio");
types.Add(".bm", "image/bmp");
types.Add(".bmp", "image/bmp");
types.Add(".boo", "application/book");
types.Add(".book", "application/book");
types.Add(".boz", "application/x-bzip2");
types.Add(".bsh", "application/x-bsh");
types.Add(".bz", "application/x-bzip");
types.Add(".bz2", "application/x-bzip2");
types.Add(".c", "text/plain");
types.Add(".c++", "text/plain");
types.Add(".cat", "application/vnd.ms-pki.seccat");
types.Add(".cc", "text/plain");
types.Add(".ccad", "application/clariscad");
types.Add(".cco", "application/x-cocoa");
types.Add(".cdf", "application/cdf");
types.Add(".cer", "application/pkix-cert");
types.Add(".cha", "application/x-chat");
types.Add(".chat", "application/x-chat");
types.Add(".class", "application/java");
types.Add(".conf", "text/plain");
types.Add(".cpio", "application/x-cpio");
types.Add(".cpp", "text/plain");
types.Add(".cpt", "application/x-cpt");
types.Add(".crl", "application/pkix-crl");
types.Add(".crt", "application/pkix-cert");
types.Add(".csh", "application/x-csh");
types.Add(".css", "text/css");
types.Add(".cxx", "text/plain");
types.Add(".dcr", "application/x-director");
types.Add(".deepv", "application/x-deepv");
types.Add(".def", "text/plain");
types.Add(".der", "application/x-x509-ca-cert");
types.Add(".dif", "video/x-dv");
types.Add(".dir", "application/x-director");
types.Add(".dl", "video/dl");
types.Add(".doc", "application/msword");
types.Add(".dot", "application/msword");
types.Add(".dp", "application/commonground");
types.Add(".drw", "application/drafting");
types.Add(".dv", "video/x-dv");
types.Add(".dvi", "application/x-dvi");
types.Add(".dwf", "drawing/x-dwf (old)");
types.Add(".dwg", "application/acad");
types.Add(".dxf", "application/dxf");
types.Add(".dxr", "application/x-director");
types.Add(".el", "text/x-script.elisp");
types.Add(".elc", "application/x-elc");
types.Add(".eps", "application/postscript");
types.Add(".es", "application/x-esrehber");
types.Add(".etx", "text/x-setext");
types.Add(".evy", "application/envoy");
types.Add(".f", "text/plain");
types.Add(".f77", "text/plain");
types.Add(".f90", "text/plain");
types.Add(".fdf", "application/vnd.fdf");
types.Add(".fif", "image/fif");
types.Add(".fli", "video/fli");
types.Add(".flo", "image/florian");
types.Add(".flx", "text/vnd.fmi.flexstor");
types.Add(".fmf", "video/x-atomic3d-feature");
types.Add(".for", "text/plain");
types.Add(".fpx", "image/vnd.fpx");
types.Add(".frl", "application/freeloader");
types.Add(".funk", "audio/make");
types.Add(".g", "text/plain");
types.Add(".g3", "image/g3fax");
types.Add(".gif", "image/gif");
types.Add(".gl", "video/gl");
types.Add(".gsd", "audio/x-gsm");
types.Add(".gsm", "audio/x-gsm");
types.Add(".gsp", "application/x-gsp");
types.Add(".gss", "application/x-gss");
types.Add(".gtar", "application/x-gtar");
types.Add(".gz", "application/x-gzip");
types.Add(".gzip", "application/x-gzip");
types.Add(".h", "text/plain");
types.Add(".hdf", "application/x-hdf");
types.Add(".help", "application/x-helpfile");
types.Add(".hgl", "application/vnd.hp-HPGL");
types.Add(".hh", "text/plain");
types.Add(".hlb", "text/x-script");
types.Add(".hlp", "application/x-helpfile");
types.Add(".hpg", "application/vnd.hp-HPGL");
types.Add(".hpgl", "application/vnd.hp-HPGL");
types.Add(".hqx", "application/binhex");
types.Add(".hta", "application/hta");
types.Add(".htc", "text/x-component");
types.Add(".htm", "text/html");
types.Add(".html", "text/html");
types.Add(".htmls", "text/html");
types.Add(".htt", "text/webviewhtml");
types.Add(".htx", "text/html");
types.Add(".ice", "x-conference/x-cooltalk");
types.Add(".ico", "image/x-icon");
types.Add(".idc", "text/plain");
types.Add(".ief", "image/ief");
types.Add(".iefs", "image/ief");
types.Add(".iges", "application/iges");
types.Add(".igs", "application/iges");
types.Add(".ima", "application/x-ima");
types.Add(".imap", "application/x-httpd-imap");
types.Add(".inf", "application/inf");
types.Add(".ins", "application/x-internett-signup");
types.Add(".ip", "application/x-ip2");
types.Add(".isu", "video/x-isvideo");
types.Add(".it", "audio/it");
types.Add(".iv", "application/x-inventor");
types.Add(".ivr", "i-world/i-vrml");
types.Add(".ivy", "application/x-livescreen");
types.Add(".jam", "audio/x-jam");
types.Add(".jav", "text/plain");
types.Add(".java", "text/plain");
types.Add(".jcm", "application/x-java-commerce");
types.Add(".jfif", "image/jpeg");
types.Add(".jfif-tbnl", "image/jpeg");
types.Add(".jpe", "image/jpeg");
types.Add(".jpeg", "image/jpeg");
types.Add(".jpg", "image/jpeg");
types.Add(".jps", "image/x-jps");
types.Add(".js", "application/x-javascript");
types.Add(".jut", "image/jutvision");
types.Add(".kar", "audio/midi");
types.Add(".ksh", "text/x-script.ksh");
types.Add(".la", "audio/nspaudio");
types.Add(".lam", "audio/x-liveaudio");
types.Add(".latex", "application/x-latex");
types.Add(".list", "text/plain");
types.Add(".lma", "audio/nspaudio");
types.Add(".log", "text/plain");
types.Add(".lsp", "application/x-lisp");
types.Add(".lst", "text/plain");
types.Add(".lsx", "text/x-la-asf");
types.Add(".ltx", "application/x-latex");
types.Add(".m", "text/plain");
types.Add(".m1v", "video/mpeg");
types.Add(".m2a", "audio/mpeg");
types.Add(".m2v", "video/mpeg");
types.Add(".m3u", "audio/x-mpequrl");
types.Add(".man", "application/x-troff-man");
types.Add(".map", "application/x-navimap");
types.Add(".mar", "text/plain");
types.Add(".mbd", "application/mbedlet");
types.Add(".mc$", "application/x-magic-cap-package-1.0");
types.Add(".mcd", "application/mcad");
types.Add(".mcf", "image/vasa");
types.Add(".mcp", "application/netmc");
types.Add(".me", "application/x-troff-me");
types.Add(".mht", "message/rfc822");
types.Add(".mhtml", "message/rfc822");
types.Add(".mid", "audio/midi");
types.Add(".midi", "audio/midi");
types.Add(".mif", "application/x-mif");
types.Add(".mime", "message/rfc822");
types.Add(".mjf", "audio/x-vnd.AudioExplosion.MjuiceMediaFile");
types.Add(".mjpg", "video/x-motion-jpeg");
types.Add(".mm", "application/base64");
types.Add(".mme", "application/base64");
types.Add(".mod", "audio/mod");
types.Add(".moov", "video/quicktime");
types.Add(".mov", "video/quicktime");
types.Add(".movie", "video/x-sgi-movie");
types.Add(".mp2", "video/mpeg");
types.Add(".mp3", "audio/mpeg3");
types.Add(".mpa", "audio/mpeg");
types.Add(".mpc", "application/x-project");
types.Add(".mpe", "video/mpeg");
types.Add(".mpeg", "video/mpeg");
types.Add(".mpg", "video/mpeg");
types.Add(".mpga", "audio/mpeg");
types.Add(".mpp", "application/vnd.ms-project");
types.Add(".mpt", "application/x-project");
types.Add(".mpv", "application/x-project");
types.Add(".mpx", "application/x-project");
types.Add(".mrc", "application/marc");
types.Add(".ms", "application/x-troff-ms");
types.Add(".mv", "video/x-sgi-movie");
types.Add(".my", "audio/make");
types.Add(".mzz", "application/x-vnd.AudioExplosion.mzz");
types.Add(".nap", "image/naplps");
types.Add(".naplps", "image/naplps");
types.Add(".nc", "application/x-netcdf");
types.Add(".ncm", "application/vnd.nokia.configuration-message");
types.Add(".nif", "image/x-niff");
types.Add(".niff", "image/x-niff");
types.Add(".nix", "application/x-mix-transfer");
types.Add(".nsc", "application/x-conference");
types.Add(".nvd", "application/x-navidoc");
types.Add(".oda", "application/oda");
types.Add(".omc", "application/x-omc");
types.Add(".omcd", "application/x-omcdatamaker");
types.Add(".omcr", "application/x-omcregerator");
types.Add(".p", "text/x-pascal");
types.Add(".p10", "application/pkcs10");
types.Add(".p12", "application/pkcs-12");
types.Add(".p7a", "application/x-pkcs7-signature");
types.Add(".p7c", "application/pkcs7-mime");
types.Add(".p7m", "application/pkcs7-mime");
types.Add(".p7r", "application/x-pkcs7-certreqresp");
types.Add(".p7s", "application/pkcs7-signature");
types.Add(".part", "application/pro_eng");
types.Add(".pas", "text/pascal");
types.Add(".pbm", "image/x-portable-bitmap");
types.Add(".pcl", "application/x-pcl");
types.Add(".pct", "image/x-pict");
types.Add(".pcx", "image/x-pcx");
types.Add(".pdb", "chemical/x-pdb");
types.Add(".pdf", "application/pdf");
types.Add(".pfunk", "audio/make");
types.Add(".pgm", "image/x-portable-graymap");
types.Add(".pic", "image/pict");
types.Add(".pict", "image/pict");
types.Add(".pkg", "application/x-newton-compatible-pkg");
types.Add(".pko", "application/vnd.ms-pki.pko");
types.Add(".pl", "text/plain");
types.Add(".plx", "application/x-PiXCLscript");
types.Add(".pm", "image/x-xpixmap");
types.Add(".pm4", "application/x-pagemaker");
types.Add(".pm5", "application/x-pagemaker");
types.Add(".png", "image/png");
types.Add(".pnm", "application/x-portable-anymap");
types.Add(".pot", "application/mspowerpoint");
types.Add(".pov", "model/x-pov");
types.Add(".ppa", "application/vnd.ms-powerpoint");
types.Add(".ppm", "image/x-portable-pixmap");
types.Add(".pps", "application/mspowerpoint");
types.Add(".ppt", "application/mspowerpoint");
types.Add(".ppz", "application/mspowerpoint");
types.Add(".pre", "application/x-freelance");
types.Add(".prt", "application/pro_eng");
types.Add(".ps", "application/postscript");
types.Add(".pvu", "paleovu/x-pv");
types.Add(".pwz", "application/vnd.ms-powerpoint");
types.Add(".py", "text/x-script.phyton");
types.Add(".pyc", "applicaiton/x-bytecode.python");
types.Add(".qcp", "audio/vnd.qcelp");
types.Add(".qd3", "x-world/x-3dmf");
types.Add(".qd3d", "x-world/x-3dmf");
types.Add(".qif", "image/x-quicktime");
types.Add(".qt", "video/quicktime");
types.Add(".qtc", "video/x-qtc");
types.Add(".qti", "image/x-quicktime");
types.Add(".qtif", "image/x-quicktime");
types.Add(".ra", "audio/x-pn-realaudio");
types.Add(".ram", "audio/x-pn-realaudio");
types.Add(".ras", "application/x-cmu-raster");
types.Add(".rast", "image/cmu-raster");
types.Add(".rexx", "text/x-script.rexx");
types.Add(".rf", "image/vnd.rn-realflash");
types.Add(".rgb", "image/x-rgb");
types.Add(".rm", "application/vnd.rn-realmedia");
types.Add(".rmi", "audio/mid");
types.Add(".rmm", "audio/x-pn-realaudio");
types.Add(".rmp", "audio/x-pn-realaudio");
types.Add(".rng", "application/ringing-tones");
types.Add(".rnx", "application/vnd.rn-realplayer");
types.Add(".roff", "application/x-troff");
types.Add(".rp", "image/vnd.rn-realpix");
types.Add(".rpm", "audio/x-pn-realaudio-plugin");
types.Add(".rss", "text/xml");
types.Add(".rt", "text/richtext");
types.Add(".rtf", "text/richtext");
types.Add(".rtx", "text/richtext");
types.Add(".rv", "video/vnd.rn-realvideo");
types.Add(".s", "text/x-asm");
types.Add(".s3m", "audio/s3m");
types.Add(".sbk", "application/x-tbook");
types.Add(".scm", "application/x-lotusscreencam");
types.Add(".sdml", "text/plain");
types.Add(".sdp", "application/sdp");
types.Add(".sdr", "application/sounder");
types.Add(".sea", "application/sea");
types.Add(".set", "application/set");
types.Add(".sgm", "text/sgml");
types.Add(".sgml", "text/sgml");
types.Add(".sh", "text/x-script.sh");
types.Add(".shar", "application/x-bsh");
types.Add(".shtml", "text/html");
types.Add(".sid", "audio/x-psid");
types.Add(".sit", "application/x-sit");
types.Add(".skd", "application/x-koan");
types.Add(".skm", "application/x-koan");
types.Add(".skp", "application/x-koan");
types.Add(".skt", "application/x-koan");
types.Add(".sl", "application/x-seelogo");
types.Add(".smi", "application/smil");
types.Add(".smil", "application/smil");
types.Add(".snd", "audio/basic");
types.Add(".sol", "application/solids");
types.Add(".spc", "application/x-pkcs7-certificates");
types.Add(".spl", "application/futuresplash");
types.Add(".spr", "application/x-sprite");
types.Add(".sprite", "application/x-sprite");
types.Add(".src", "application/x-wais-source");
types.Add(".ssi", "text/x-server-parsed-html");
types.Add(".ssm", "application/streamingmedia");
types.Add(".sst", "application/vnd.ms-pki.certstore");
types.Add(".step", "application/step");
types.Add(".stl", "application/sla");
types.Add(".stp", "application/step");
types.Add(".sv4cpio", "application/x-sv4cpio");
types.Add(".sv4crc", "application/x-sv4crc");
types.Add(".svf", "image/x-dwg");
types.Add(".svr", "application/x-world");
types.Add(".swf", "application/x-shockwave-flash");
types.Add(".t", "application/x-troff");
types.Add(".talk", "text/x-speech");
types.Add(".tar", "application/x-tar");
types.Add(".tbk", "application/toolbook");
types.Add(".tcl", "text/x-script.tcl");
types.Add(".tcsh", "text/x-script.tcsh");
types.Add(".tex", "application/x-tex");
types.Add(".texi", "application/x-texinfo");
types.Add(".texinfo", "application/x-texinfo");
types.Add(".text", "text/plain");
types.Add(".tgz", "application/x-compressed");
types.Add(".tif", "image/tiff");
types.Add(".tiff", "image/tiff");
types.Add(".tr", "application/x-troff");
types.Add(".tsi", "audio/tsp-audio");
types.Add(".tsp", "audio/tsplayer");
types.Add(".tsv", "text/tab-separated-values");
types.Add(".turbot", "image/florian");
types.Add(".txt", "text/plain");
types.Add(".uil", "text/x-uil");
types.Add(".uni", "text/uri-list");
types.Add(".unis", "text/uri-list");
types.Add(".unv", "application/i-deas");
types.Add(".uri", "text/uri-list");
types.Add(".uris", "text/uri-list");
types.Add(".ustar", "multipart/x-ustar");
types.Add(".uu", "text/x-uuencode");
types.Add(".uue", "text/x-uuencode");
types.Add(".vcd", "application/x-cdlink");
types.Add(".vcs", "text/x-vCalendar");
types.Add(".vda", "application/vda");
types.Add(".vdo", "video/vdo");
types.Add(".vew", "application/groupwise");
types.Add(".viv", "video/vivo");
types.Add(".vivo", "video/vivo");
types.Add(".vmd", "application/vocaltec-media-desc");
types.Add(".vmf", "application/vocaltec-media-file");
types.Add(".voc", "audio/voc");
types.Add(".vos", "video/vosaic");
types.Add(".vox", "audio/voxware");
types.Add(".vqe", "audio/x-twinvq-plugin");
types.Add(".vqf", "audio/x-twinvq");
types.Add(".vql", "audio/x-twinvq-plugin");
types.Add(".vrml", "application/x-vrml");
types.Add(".vrt", "x-world/x-vrt");
types.Add(".vsd", "application/x-visio");
types.Add(".vst", "application/x-visio");
types.Add(".vsw", "application/x-visio");
types.Add(".w60", "application/wordperfect6.0");
types.Add(".w61", "application/wordperfect6.1");
types.Add(".w6w", "application/msword");
types.Add(".wav", "audio/wav");
types.Add(".wb1", "application/x-qpro");
types.Add(".wbmp", "image/vnd.wap.wbmp");
types.Add(".web", "application/vnd.xara");
types.Add(".wiz", "application/msword");
types.Add(".wk1", "application/x-123");
types.Add(".wmf", "windows/metafile");
types.Add(".wml", "text/vnd.wap.wml");
types.Add(".wmlc", "application/vnd.wap.wmlc");
types.Add(".wmls", "text/vnd.wap.wmlscript");
types.Add(".wmlsc", "application/vnd.wap.wmlscriptc");
types.Add(".word", "application/msword");
types.Add(".wp", "application/wordperfect");
types.Add(".wp5", "application/wordperfect");
types.Add(".wp6", "application/wordperfect");
types.Add(".wpd", "application/wordperfect");
types.Add(".wq1", "application/x-lotus");
types.Add(".wri", "application/mswrite");
types.Add(".wrl", "application/x-world");
types.Add(".wrz", "model/vrml");
types.Add(".wsc", "text/scriplet");
types.Add(".wsrc", "application/x-wais-source");
types.Add(".wtk", "application/x-wintalk");
types.Add(".xbm", "image/x-xbitmap");
types.Add(".xdr", "video/x-amt-demorun");
types.Add(".xgz", "xgl/drawing");
types.Add(".xif", "image/vnd.xiff");
types.Add(".xl", "application/excel");
types.Add(".xla", "application/excel");
types.Add(".xlb", "application/excel");
types.Add(".xlc", "application/excel");
types.Add(".xld", "application/excel");
types.Add(".xlk", "application/excel");
types.Add(".xll", "application/excel");
types.Add(".xlm", "application/excel");
types.Add(".xls", "application/excel");
types.Add(".xlt", "application/excel");
types.Add(".xlv", "application/excel");
types.Add(".xlw", "application/excel");
types.Add(".xm", "audio/xm");
types.Add(".xml", "text/xml");
types.Add(".xmz", "xgl/movie");
types.Add(".xpix", "application/x-vnd.ls-xpix");
types.Add(".xpm", "image/xpm");
types.Add(".x-png", "image/png");
types.Add(".xsr", "video/x-amt-showrun");
types.Add(".xwd", "image/x-xwd");
types.Add(".xyz", "chemical/x-pdb");
types.Add(".z", "application/x-compressed");
types.Add(".zip", "application/zip");
types.Add(".zsh", "text/x-script.zsh");
return types;
}
}
}
Here is the library: Suddenelfilio.ExtensionMethods.zip
Downloaded 204 times
How to get the mime type of a file using the name of a file in C#
Posted by suddenelfilio in Visual Studio .Net on 31/08/2010
UPDATE: in PART 2: How to get the mime type of a file using the name of a file in C# I updated the library so it first tries to look up the mime type in a hard coded table
I recently needed to know the MIME type of a file or a file name. I know this is not that difficult certainly if you know that all the known mime types are stored in the registry of Windows. There is one caveat though, the extension you are resolving must be registered first. For example if you don’t install Adobe Acrobat PDF reader then the .pdf extension is not known and my solution I propose below won’t return any result. What you can do is either add the extension manually to the registry or install the corresponding application on the machine that needs to know about it.
Okay I’ve created a small (at least for the moment) library that allows you to call GetMimiType() on either a string or System.IO.FileInfo instance. Of course when you call this method on a string make sure the value is a valid file name! I’ve created 2 extension methods for this that can both be found in Suddenelfilio.ExtensionMethods.IO.
Here is the code to find a mime type in the registry:
string fileExtension = System.IO.Path.GetExtension(fileName).ToLower();
Microsoft.Win32.RegistryKey rk = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(fileExtension);
if (rk != null && rk.GetValue("Content Type") != null)
return rk.GetValue("Content Type").ToString();
return null;
Now if you want to use my library and its extension methods below is a sample of a console’s application Program.cs file:
using System;
using System.IO;
using Suddenelfilio.ExtensionMethods.IO;
namespace TestConsole
{
class Program
{
static void Main(string[] args)
{
//Using a string with a filename as value.
string name = "d:\\test.txt";
Console.WriteLine("mimetype for file {0} is {1}", name, name.GetMimeType());
FileInfo info = new FileInfo("d:\\test.txt");
Console.WriteLine("mimetype for file {0} is {1}", info.FullName, info.GetMimeType());
Console.ReadLine();
}
}
}
The result in the console application is the following:
Here is the download containing the dll with the extension methods: Look at the follow up article
LinkedIn OAuth using Hammock in C# & ASP.NET
Posted by suddenelfilio in .net, Web & Design, Web Services on 24/08/2010
UPDATE: Hammock moved to github https://github.com/danielcrenna/hammock
Codeplex.com description of Hammock:
Hammock is a REST library for .NET that greatly simplifies consuming and wrapping RESTful services.

I’m currently working on a little web project that needed integration with LinkedIn.com. The LinkedIn API allows for OAuth authorization and authentication. They describe the process of getting a request token, authorizing it by the user and then getting an access token. Standard OAuth you might say. So I needed a way to do this in C# and found the Hammock library. Although Hammock does not only do OAuth I used it for that purpose only at the moment.
Below is the code I wrote to get a request token and send the user to the authorization page at Linkedin:
public void RequestAndAuthorize()
{
var credentials = new OAuthCredentials
{
CallbackUrl = "http://127.0.0.1/oauth/callback/",
ConsumerKey = ConfigurationManager.AppSettings["ConsumerKey"],
ConsumerSecret = ConfigurationManager.AppSettings["ConsumerSecret"],
Verifier = "123456",
Type = OAuthType.RequestToken
};
var client = new RestClient { Authority = "https://api.linkedin.com/uas/oauth", Credentials = credentials };
var request = new RestRequest { Path = "requestToken" };
RestResponse response = client.Request(request);
string token = response.Content.Split('&').Where(s => s.StartsWith("oauth_token=")).Single().Split('=')[1];
string token_secret = response.Content.Split('&').Where(s => s.StartsWith("oauth_token_secret=")).Single().Split('=')[1];
Response.Redirect("https://api.linkedin.com/uas/oauth?oauth_token=" + token);
}
Once the user has authorized your request token the LinkedIn server will redirect the user back to the callback url in this case this is http://127.0.0.1/oauth/callback. Using the returned oauth_token and oauth_token_secret (you got this one while requesting a request token) you can now get an access token so you can start making authenticated API calls from you application on behalf of the user.
This is the code that is used when the callback url is called:
public void Callback()
{
var credentials = new OAuthCredentials
{
ConsumerKey = ConfigurationManager.AppSettings["ConsumerKey"],
ConsumerSecret = ConfigurationManager.AppSettings["ConsumerSecret"],
Token = token,
TokenSecret = token_secret,
Verifier = verifier,
Type = OAuthType.AccessToken,
ParameterHandling = OAuthParameterHandling.HttpAuthorizationHeader,
SignatureMethod = OAuthSignatureMethod.HmacSha1,
Version = "1.0"
};
var client = new RestClient { Authority = "https://api.linkedin.com/uas/oauth", Credentials = credentials, Method = WebMethod.Post };
var request = new RestRequest { Path = "accessToken" };
RestResponse response = client.Request(request);
string content = response.Content;
}
As you can see Hammock is really nice and allows for easy OAuth authentication/authorization to be used.




