Showing posts with label c#. Show all posts
Showing posts with label c#. Show all posts

Tuesday, August 28, 2012

Force Content Types to Json in .NET WebApi

I ran into a situation where I couldn't set the Content-Type header in the http request client I was using. (Crossrider's appAPI.request.post)

The client was either not setting a Content-Type or defaulting to application/x-www-form-urlencoded

If you put the code below in Application_Start you should be able to force form-urlencoded data to the JsonFormatter and by removing the XmlFormatter, Json will also be the default.

HttpConfiguration config = GlobalConfiguration.Configuration;
foreach (var mediaType in config.Formatters.FormUrlEncodedFormatter.SupportedMediaTypes)
{
    config.Formatters.JsonFormatter.SupportedMediaTypes.Add(mediaType);
}
config.Formatters.Remove(config.Formatters.FormUrlEncodedFormatter);
config.Formatters.Remove(config.Formatters.XmlFormatter);

Tuesday, September 6, 2011

Entity Framework Code First Error: Could not create constraint

While using Entity Framework Code First you will run into an error similar to the one below if you create objects that have a circular reference.

Introducing FOREIGN KEY constraint 'File_Folder' on table 'Filess' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints.
Could not create constraint. See previous errors.


The fix is pretty simple but not very intuitive.

Add the following line to your OnModelCreating override of your DbContext:

modelBuilder.Entity<File>().HasRequired(oo => oo.Folder).WithMany(oo => oo.Files).WillCascadeOnDelete(false);

So it looks something like this:

public class FilesystemDB : DbContext
{
 public DbSet<File> Files { get; set; }
 public DbSet<Folder> Folders { get; set; }
 
 protected override void OnModelCreating(DbModelBuilder modelBuilder)
 {
  modelBuilder.Entity<File>().HasRequired(oo => oo.Folder).WithMany(oo => oo.Files).WillCascadeOnDelete(false);
 }

}

For the best information on Entity Framework Code First read Morteza Manavi's blog.

Tuesday, March 22, 2011

Get Mime Type From File Extension using C#

I thought this would be built into .NET but I guess it's not. The first way to do this is to use the registry like Kaushik Chakraborti does.

Since you may have security issues with doing that on a shared hosting provider I decided to take the list of Mime Types I found at FeedForAll (which appears to be link bait but oh well) and make a C# Dictionary out of them.

This comes in handy if you want to do something like this in MVC:

public ActionResult Image()
{
    string filePath = "SOME-FILE.png";
    return base.File(filePath, MimeTypes.GetMimeTypeOrDefault(System.IO.Path.GetExtension(filePath), "binary/octet-stream"));
}



You can find the latest version of this library on GitHub.

using System;
using System.Collections.Generic;
using System.Linq;

/// <summary>
/// Dictionary of Mime Types by File Extension.
/// Created by CDeutsch.
/// License:
/// http://creativecommons.org/licenses/by/3.0/
/// Original list created from here:
/// http://www.feedforall.com/mime-types.htm
/// </summary>
public static class MimeTypes
{
    public static Dictionary<string, string> MimeTypeDictionary = new Dictionary<string, string> 
    {
        {".ai", "application/postscript"},
        {".aif", "audio/x-aiff"},
        {".aifc", "audio/x-aiff"},
        {".aiff", "audio/x-aiff"},
        {".asc", "text/plain"},
        {".atom", "application/atom+xml"},
        {".au", "audio/basic"},
        {".avi", "video/x-msvideo"},
        {".bcpio", "application/x-bcpio"},
        {".bin", "application/octet-stream"},
        {".bmp", "image/bmp"},
        {".cdf", "application/x-netcdf"},
        {".cgm", "image/cgm"},
        {".class", "application/octet-stream"},
        {".cpio", "application/x-cpio"},
        {".cpt", "application/mac-compactpro"},
        {".csh", "application/x-csh"},
        {".css", "text/css"},
        {".dcr", "application/x-director"},
        {".dif", "video/x-dv"},
        {".dir", "application/x-director"},
        {".djv", "image/vnd.djvu"},
        {".djvu", "image/vnd.djvu"},
        {".dll", "application/octet-stream"},
        {".dmg", "application/octet-stream"},
        {".dms", "application/octet-stream"},
        {".doc", "application/msword"},
        {".dtd", "application/xml-dtd"},
        {".dv", "video/x-dv"},
        {".dvi", "application/x-dvi"},
        {".dxr", "application/x-director"},
        {".eps", "application/postscript"},
        {".etx", "text/x-setext"},
        {".exe", "application/octet-stream"},
        {".ez", "application/andrew-inset"},
        {".gif", "image/gif"},
        {".gram", "application/srgs"},
        {".grxml", "application/srgs+xml"},
        {".gtar", "application/x-gtar"},
        {".hdf", "application/x-hdf"},
        {".hqx", "application/mac-binhex40"},
        {".htm", "text/html"},
        {".html", "text/html"},
        {".ice", "x-conference/x-cooltalk"},
        {".ico", "image/x-icon"},
        {".ics", "text/calendar"},
        {".ief", "image/ief"},
        {".ifb", "text/calendar"},
        {".iges", "model/iges"},
        {".igs", "model/iges"},
        {".jnlp", "application/x-java-jnlp-file"},
        {".jp2", "image/jp2"},
        {".jpe", "image/jpeg"},
        {".jpeg", "image/jpeg"},
        {".jpg", "image/jpeg"},
        {".js", "application/x-javascript"},
        {".kar", "audio/midi"},
        {".latex", "application/x-latex"},
        {".lha", "application/octet-stream"},
        {".lzh", "application/octet-stream"},
        {".m3u", "audio/x-mpegurl"},
        {".m4a", "audio/mp4a-latm"},
        {".m4b", "audio/mp4a-latm"},
        {".m4p", "audio/mp4a-latm"},
        {".m4u", "video/vnd.mpegurl"},
        {".m4v", "video/x-m4v"},
        {".mac", "image/x-macpaint"},
        {".man", "application/x-troff-man"},
        {".mathml", "application/mathml+xml"},
        {".me", "application/x-troff-me"},
        {".mesh", "model/mesh"},
        {".mid", "audio/midi"},
        {".midi", "audio/midi"},
        {".mif", "application/vnd.mif"},
        {".mov", "video/quicktime"},
        {".movie", "video/x-sgi-movie"},
        {".mp2", "audio/mpeg"},
        {".mp3", "audio/mpeg"},
        {".mp4", "video/mp4"},
        {".mpe", "video/mpeg"},
        {".mpeg", "video/mpeg"},
        {".mpg", "video/mpeg"},
        {".mpga", "audio/mpeg"},
        {".ms", "application/x-troff-ms"},
        {".msh", "model/mesh"},
        {".mxu", "video/vnd.mpegurl"},
        {".nc", "application/x-netcdf"},
        {".oda", "application/oda"},
        {".ogg", "application/ogg"},
        {".pbm", "image/x-portable-bitmap"},
        {".pct", "image/pict"},
        {".pdb", "chemical/x-pdb"},
        {".pdf", "application/pdf"},
        {".pgm", "image/x-portable-graymap"},
        {".pgn", "application/x-chess-pgn"},
        {".pic", "image/pict"},
        {".pict", "image/pict"},
        {".png", "image/png"},
        {".pnm", "image/x-portable-anymap"},
        {".pnt", "image/x-macpaint"},
        {".pntg", "image/x-macpaint"},
        {".ppm", "image/x-portable-pixmap"},
        {".ppt", "application/vnd.ms-powerpoint"},
        {".ps", "application/postscript"},
        {".qt", "video/quicktime"},
        {".qti", "image/x-quicktime"},
        {".qtif", "image/x-quicktime"},
        {".ra", "audio/x-pn-realaudio"},
        {".ram", "audio/x-pn-realaudio"},
        {".ras", "image/x-cmu-raster"},
        {".rdf", "application/rdf+xml"},
        {".rgb", "image/x-rgb"},
        {".rm", "application/vnd.rn-realmedia"},
        {".roff", "application/x-troff"},
        {".rtf", "text/rtf"},
        {".rtx", "text/richtext"},
        {".sgm", "text/sgml"},
        {".sgml", "text/sgml"},
        {".sh", "application/x-sh"},
        {".shar", "application/x-shar"},
        {".silo", "model/mesh"},
        {".sit", "application/x-stuffit"},
        {".skd", "application/x-koan"},
        {".skm", "application/x-koan"},
        {".skp", "application/x-koan"},
        {".skt", "application/x-koan"},
        {".smi", "application/smil"},
        {".smil", "application/smil"},
        {".snd", "audio/basic"},
        {".so", "application/octet-stream"},
        {".spl", "application/x-futuresplash"},
        {".src", "application/x-wais-source"},
        {".sv4cpio", "application/x-sv4cpio"},
        {".sv4crc", "application/x-sv4crc"},
        {".svg", "image/svg+xml"},
        {".swf", "application/x-shockwave-flash"},
        {".t", "application/x-troff"},
        {".tar", "application/x-tar"},
        {".tcl", "application/x-tcl"},
        {".tex", "application/x-tex"},
        {".texi", "application/x-texinfo"},
        {".texinfo", "application/x-texinfo"},
        {".tif", "image/tiff"},
        {".tiff", "image/tiff"},
        {".tr", "application/x-troff"},
        {".tsv", "text/tab-separated-values"},
        {".txt", "text/plain"},
        {".ustar", "application/x-ustar"},
        {".vcd", "application/x-cdlink"},
        {".vrml", "model/vrml"},
        {".vxml", "application/voicexml+xml"},
        {".wav", "audio/x-wav"},
        {".wbmp", "image/vnd.wap.wbmp"},
        {".wbmxl", "application/vnd.wap.wbxml"},
        {".wml", "text/vnd.wap.wml"},
        {".wmlc", "application/vnd.wap.wmlc"},
        {".wmls", "text/vnd.wap.wmlscript"},
        {".wmlsc", "application/vnd.wap.wmlscriptc"},
        {".wrl", "model/vrml"},
        {".xbm", "image/x-xbitmap"},
        {".xht", "application/xhtml+xml"},
        {".xhtml", "application/xhtml+xml"},
        {".xls", "application/vnd.ms-excel"},
        {".xml", "application/xml"},
        {".xpm", "image/x-xpixmap"},
        {".xsl", "application/xml"},
        {".xslt", "application/xslt+xml"},
        {".xul", "application/vnd.mozilla.xul+xml"},
        {".xwd", "image/x-xwindowdump"},
        {".xyz", "chemical/x-xyz"},
        {".zip", "application/zip"}
    };

    /// <summary>
    /// Returns the Dictionary entry that matches the Extension.
    /// </summary>
    /// <param name="Extension"></param>
    /// <returns></returns>
    public static KeyValuePair<string, string> FindByExtension(string Extension)
    {
        return MimeTypeDictionary.SingleOrDefault(oo => oo.Key.ToLowerInvariant() == Extension.ToLowerInvariant());
    }

    /// <summary>
    /// Returns the MimeType that matches the Extension. If no match is found an error is thrown.
    /// </summary>
    /// <param name="Extension"></param>
    /// <returns></returns>
    public static string GetMimeType(string Extension)
    {
        var rslt = FindByExtension(Extension);
        if (!string.IsNullOrWhiteSpace(rslt.Value))
            return rslt.Value;
        else
            throw new ApplicationException("Unknown Extension.");
    }

    /// <summary>
    /// Returns the MimeType that matches the Extension. If no match is found the default value is returned.
    /// </summary>
    /// <param name="Extension"></param>
    /// <param name="Default"></param>
    /// <returns></returns>
    public static string GetMimeTypeOrDefault(string Extension, string Default)
    {
        var rslt = FindByExtension(Extension);
        if (!string.IsNullOrWhiteSpace(rslt.Value))
            return rslt.Value;
        else
            return Default;
    }


    /// <summary>
    /// Returns the Dictionary entry that matches the MimeType.
    /// </summary>
    /// <param name="MimeType"></param>
    /// <returns></returns>
    private static KeyValuePair<string, string> FindByMimeType(string MimeType)
    {
        return MimeTypeDictionary.SingleOrDefault(oo => oo.Value.ToLowerInvariant() == MimeType.ToLowerInvariant());
    }

    /// <summary>
    /// Returns the Extension that matches the MimeType. If no match is found an error is thrown.
    /// </summary>
    /// <param name="MimeType"></param>
    /// <returns></returns>
    public static string GetExtension(string MimeType)
    {
        var rslt = FindByMimeType(MimeType);
        if (!string.IsNullOrWhiteSpace(rslt.Key))
            return rslt.Key;
        else
            throw new ApplicationException("Unknown Mime Type.");
    }

    /// <summary>
    /// Returns the Extension that matches the MimeType. If no match is found the default value is returned.
    /// </summary>
    /// <param name="MimeType"></param>
    /// <param name="Default"></param>
    /// <returns></returns>
    public static string GetExtensionOrDefault(string MimeType, string Default)
    {
        var rslt = FindByMimeType(MimeType);
        if (!string.IsNullOrWhiteSpace(rslt.Key))
            return rslt.Key;
        else
            return Default;
    }
    
}