mardi 16 décembre 2014

Audio Player HTML5  ASP.NET Control

ASP.NET HTML5 est un contrôle est basé en HTML5 et ne nécessitent pas de Flash player ou tout autre contrôle ActiveX pour lire des fichiers audio sur votre site.
Je me suis basé sur ce projet HTML5 MUSIC PLAYER http://www.codebasehero.com/2011/07/html5-music-player-updated/ pour créér mon contrôle asp.net.

Aperçu du résultat


Audio Player HTML5  ASP.NET Control 
ASP.NET HTML5 Audio Player


Utilisation

Html5playlist.cs

/**
 * Created by Hicham Lakhdar
 * hichamlakhdar.blogspot.com
 * Date: 16/12/2014
 *
 * Version: 1.01
 * License: MIT License
 */


using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace html5_playlist_aspnet.Controls
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:html5playlist runat=server></{0}:html5playlist>")]
    public class html5playlist : Label
    {
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        ArrayList myPlaylist=new ArrayList();
      

        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);
        }
        public void AddTrack(string title, string mp3path, string artiste, string imgcoverpath)
        { 
            string track="{mp3:'"+mp3path+"',title:'"+title+"',artist:'"+artiste+"',duration:'0:00',cover:'"+imgcoverpath+"'}";
            myPlaylist.Add(track);
        }
        public void Bind()
        {
            var strings = myPlaylist.Cast<string>().ToArray();
            var theString ="["+ string.Join(",", strings)+ "]";
            string script = @"$('.playlistzone').ttwMusicPlayer(" + theString + ", {autoPlay:false, description:'',jPlayer:{swfPath:'Scripts/playlist_plugin/jquery-jplayer',    }});";
            ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), Guid.NewGuid().ToString(), script, true);
          
        }
        protected override void RenderContents(HtmlTextWriter output)
        {
            try
            {
                output.Write(@"<div class='playlistzone'></div>");
            }
            catch (Exception ex)
            {
                output.Write(ex);
            }
        }
      
    }
}


demo.aspx


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="demo.aspx.cs" Inherits="html5_playlist_aspnet.demo" %>

<%@ Register assembly="html5_playlist_aspnet" namespace="html5_playlist_aspnet.Controls" tagprefix="cc1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
 <!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
 <script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
 <![endif]-->

  <link rel="stylesheet" type="text/css" href="Scripts/playlist_plugin/css/style.css"/>
  <link rel="stylesheet" type="text/css" href="Content/demo.css"/>
  <script type="text/javascript" src="Scripts/jquery-1.10.2.min.js"></script>
  <script type="text/javascript" src="Scripts/playlist_plugin/jquery.jplayer.js"></script>
  <script type="text/javascript" src="Scripts/playlist_plugin/ttw-music-player-min.js"></script>
  <script type="text/javascript" src="Scripts/1.js"></script>
  
</head>
<body>
         <form id="form1" runat="server">
  
                  <cc1:html5playlist ID="html5playlist1" runat="server">
                 </cc1:html5playlist>
           <div class="footer">
                 &copy; Hicham Lakhdar 2014
           </div>
       
         </form>
   
</body>
</html>



demo.aspx.cs


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace html5_playlist_aspnet
{
    public partial class demo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                html5playlist1.AddTrack("Track 005", "mp3/1.mp3", "Lorem ipsum dolor sit", "images/1.jpg");
                html5playlist1.AddTrack("Track 006", "mp3/1.mp3", "Sed ut perspiciatis unde omnis ", "images/1.jpg");
                html5playlist1.AddTrack("Track 007", "mp3/1.mp3", "Lorem ipsum dolor sit", "images/2.jpg");
                html5playlist1.AddTrack("Track 008", "mp3/1.mp3", "Sed ut perspiciatis unde omnis ", "images/1.jpg");
                html5playlist1.AddTrack("Track 009", "mp3/1.mp3", "Lorem ipsum dolor sit", "images/1.jpg");
                html5playlist1.AddTrack("Track 0010", "mp3/1.mp3", "Sed ut perspiciatis unde omnis ", "images/1.jpg");
                html5playlist1.AddTrack("Track 0011", "mp3/1.mp3", "Lorem ipsum dolor sit", "images/2.jpg");
                html5playlist1.AddTrack("Track 0013", "mp3/1.mp3", "Sed ut perspiciatis unde omnis ", "images/1.jpg");
                html5playlist1.AddTrack("Track 0014", "mp3/1.mp3", "Lorem ipsum dolor sit", "images/1.jpg");
                html5playlist1.AddTrack("Track 0015", "mp3/1.mp3", "Sed ut perspiciatis unde omnis ", "images/1.jpg");
                html5playlist1.AddTrack("Track 0016", "mp3/1.mp3", "Lorem ipsum dolor sit", "images/1.jpg");
                html5playlist1.AddTrack("Track 0017", "mp3/1.mp3", "Sed ut perspiciatis unde omnis ", "images/1.jpg");
                html5playlist1.AddTrack("Track 0018", "mp3/1.mp3", "Sed ut perspiciatis unde omnis", "images/1.jpg");
                html5playlist1.AddTrack("Track 0019", "mp3/1.mp3", "Lorem ipsum dolor sit", "images/1.jpg");
                html5playlist1.Bind();
            }
        }
    }
}



Téléchargement démo : vs2012demo.zip

lundi 15 décembre 2014

Url Routing avec ASP.NET WebForm

Qu'est ce que le Routage ASP.NET

Nous accédons à notre application web en utilisant une URL qui est normalement le chemin physique des pages. Donc URL de routage est un moyen de fournir notre propre URL au lieu du chemin physique de la page. Une autre façon, de routage nous permet un moyen de configurer notre application pour accepter une URL demandée qui fait ne correspond pas à des fichiers physiques. Du point de vue de la sécurité de l'application, ce est important parce que l'on peut facilement connaître la structure de la solution de l'application.

Pourquoi utilisé le Routage ASP.NET


  • Un nom de domaine qui est facile à retenir et facile à épeler
  • URL courtes
  • Facile à taper les URL
  • URLs qui visualisent la structure du site
  • URL persistants qui ne changent pas



Exemple d'utilisation

  1. Commençant par la définition les routes par la methode  RegisterRoutes sur global.asax:


     void RegisterRoutes(RouteCollection routes)
        {
            routes.MapPageRoute("DemoRoute1",
            "Demo/{year}",
            "~/demo_routing1.aspx");
            routes.MapPageRoute("DemoRoute2",
                "Demo/{lang}/{year}",
                "~/demo_routing2.aspx");
        }
 
     2.  Enregistrer les routes sur la méthode Application_Start


      void Application_Start(object sender, EventArgs e)
        {
     
            RegisterRoutes(RouteTable.Routes);
        }
   

   3. Création des liens sur une page demo.aspx

  • URL codées en dur
        <asp:HyperLink ID="HyperLink1" runat="server" target="_blank"
            NavigateUrl="~/Demo/2014">
            Demo 1
        </asp:HyperLink>
          </br>
        <asp:HyperLink ID="HyperLink2" runat="server" target="_blank"
            NavigateUrl="~/Demo/FR/2014">
            Demo 2
       </asp:HyperLink>


  • URL générées automatiquement en utilisant du balisage


 <asp:HyperLink ID="HyperLink4" runat="server" target="_blank"
            NavigateUrl="<%$RouteUrl:annee=2014,routename=DemoRoute1%>">>
            Demo 3
        </asp:HyperLink>
          </br>
        <asp:HyperLink ID="HyperLink5" runat="server" target="_blank"
            NavigateUrl="<%$RouteUrl:lang=FR,annee=2015,routename=DemoRoute2%>">
            Demo 4
        </asp:HyperLink>
  • URL générées automatiquement en utilisant du code

RouteValueDictionary parameters =
            new RouteValueDictionary  
                { 
                    {"year", "2014" }
                };
            VirtualPathData vpd =RouteTable.Routes.GetVirtualPath(null, "ExpensesRoute", parameters);
            HyperLink6.NavigateUrl = vpd.VirtualPath;



 4. Résultat:

Mon Url réel est http://localhost:54742/demo_routing2.aspx/lang=FR&annee=2014,et le routage m'a donné:

mercredi 10 décembre 2014

Responsive ASP.NET Menu avec Bootstrap

Dans ce tutoriel, nous allons mettre en œuvre une barre de navigation en utilisant ASP.NET avec Bootstrap. Commençons par un appéçu du résultat:

Responsive ASP.NET Menu avec Bootstrap
Responsive ASP.NET Menu avec Bootstrap



Création du contrôle serveur avec les ressources css et javascript intégré:

Structure du projet
ASP.NET Bootstrap Project Sturcture

bootstrapMenu.cs


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace BootstrapNavigation
{
    [DefaultProperty("Text")]
    [ToolboxData("<{0}:bootstrapMenu runat=server></{0}:bootstrapMenu>")]
    public class bootstrapMenu : Label
    {
        [Bindable(true)]
        [Category("Appearance")]
        [DefaultValue("")]
        [Localizable(true)]
        private List<NavItem> mList;

        public List<NavItem> MenuList
        {
            get { return mList; }
            set { mList = value; }
        }
        protected override void OnLoad(System.EventArgs e)
        {
            base.OnLoad(e);

            HtmlGenericControl csslink = new HtmlGenericControl("link");
            csslink.ID = "GridStyle";
            csslink.Attributes.Add("href", Page.ClientScript.GetWebResourceUrl(this.GetType(), "BootstrapNavigation.Css.bootstrap.css"));
            csslink.Attributes.Add("type", "text/css");
            csslink.Attributes.Add("rel", "stylesheet");
            Page.Header.Controls.Add(csslink);
            HtmlGenericControl csslink2 = new HtmlGenericControl("link");
            csslink2.ID = "GridStyle";
            csslink2.Attributes.Add("href", Page.ClientScript.GetWebResourceUrl(this.GetType(), "BootstrapNavigation.Css.navbar.css"));
            csslink2.Attributes.Add("type", "text/css");
            csslink2.Attributes.Add("rel", "stylesheet");
            Page.Header.Controls.Add(csslink2);

            ClientScriptManager cs = this.Page.ClientScript;
            cs.RegisterClientScriptResource(typeof(bootstrapMenu), "BootstrapNavigation.Scripts.jquery-1.11.1.min.js");
            cs.RegisterClientScriptResource(typeof(bootstrapMenu), "BootstrapNavigation.Scripts.bootstrap.min.js");
            cs.RegisterClientScriptResource(typeof(bootstrapMenu), "BootstrapNavigation.Scripts.navbar.js");
        }
        protected override void OnPreRender(EventArgs e)
        {
            base.OnPreRender(e);

           
        }

        protected override void RenderContents(HtmlTextWriter output)
        {
            try
            {
                NavItem menu = new NavItem();

                output.Write(@"<div class='navbar-default navbar navbar-default navbar-fixed-top' role='navigation'>
                            <div class='container'>
                                <div class='navbar-header'>
                                    <button type='button' class='navbar-toggle' data-toggle='collapse' data-target='.navbar-collapse'>
                                        <span class='sr-only'>Toggle navigation</span>
                                        <span class='icon-bar'></span>
                                        <span class='icon-bar'></span>
                                        <span class='icon-bar'></span>
                                    </button>
                                   
                                </div>

                    <div class='collapse navbar-collapse'>
                          <ul class='nav navbar-nav'>
                            ");

                //Adding menus
                output.Write(menuHtmlGenerator(mList));

                output.Write(@"</ul>
                    </div><!--/.nav-collapse -->
                  </div>
              </div>");
            }
            catch (Exception ex)
            {
                output.Write(ex);
            }
        }
        protected string menuHtmlGenerator(List<NavItem> mList)
        {
            StringBuilder s = new StringBuilder();
            var parentmenu = from parent in mList where parent.IsParent == true select parent;

            foreach (NavItem m in parentmenu)
            {
                s.Append(System.Environment.NewLine);
                s.Append("<li >");
                s.Append("<a href='" + m.Nom + "'  class='dropdown-toggle' data-toggle='dropdown' ");
                s.Append("title='" + m.Description + "' ");
                s.Append(">");
                s.Append(m.Description);
                s.Append("</a>");

                var query = (from item in mList where item.ParentId == m.Id select item);
                if (query.Count() > 0)
                {
                    s.Append(@"   <ul class='dropdown-menu multi-level'> ");
                    foreach (NavItem it in query)
                    {
                        s.Append(@"<li><a href='#'>" + it.Nom + "</a></li>");
                    }

                    s.Append("</ul>");
                }

                s.Append("</li>");

                s.Append(System.Environment.NewLine);
            }
            //Return Full HTML Code As String
            return s.ToString();
        }
    }
}





AssemblyInfo.cs

using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("asp.net_bootstrap_menu")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("asp.net_bootstrap_menu")]
[assembly: AssemblyCopyright("Copyright ©  2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible 
// to COM components.  If you need to access a type in this assembly from 
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("245529e7-cce4-43ed-9e4f-cfb90d6805a7")]

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]


// Ressources utilisés par le contôle serveur
[assembly: System.Web.UI.WebResource("BootstrapNavigation.Css.bootstrap.css", "text/css")] [assembly: System.Web.UI.WebResource("BootstrapNavigation.Css.navbar.css", "text/css")] [assembly: System.Web.UI.WebResource("BootstrapNavigation.Scripts.jquery-1.11.1.min.js", "text/javascript")] [assembly: System.Web.UI.WebResource("BootstrapNavigation.Scripts.bootstrap.js", "text/javascript")] [assembly: System.Web.UI.WebResource("BootstrapNavigation.Scripts.bootstrap.min.js", "text/javascript")] [assembly: System.Web.UI.WebResource("BootstrapNavigation.Scripts.navbar.js", "text/javascript")]





NavItem.cs

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

namespace BootstrapNavigation
{
    public class NavItem
    {
        public int Id { get; set; }
        public String Nom { get; set; }
        public String Description { get; set; }
        public bool IsParent { get; set; }
        public int  ParentId { get; set; }
        
    }
}


Demo


Demo.aspx


<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Demo.aspx.cs" Inherits="WebApplication3.Demo" %>

<%@ Register Assembly="BootstrapNavigation" Namespace="BootstrapNavigation" TagPrefix="cc1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
     <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="Content/bootstrap.css" rel="stylesheet" />
    <link href="Content/bootstrap-responsive.css" rel="stylesheet" />
    <link href="Content/site.css" rel="stylesheet" />
</head>
<body>
  <form id="form1" runat="server">
       
  <div class="container">
      <div class="sitename Intro">
          <h3>Bootstrap ASP.NET Menu</h3>
      </div>

      <asp:PlaceHolder ID="ph" runat="server"></asp:PlaceHolder>

      <!-- Jumbotron -->
      <div class="jumbotron top-buffer">
        <h1>ASP.NET Bootstrap menu</h1>
        <p class="lead">Cras justo odio, dapibus ac facilisis in, egestas eget quam. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
       
      </div>

      <hr>

      <!-- Example row of columns -->
      <div class="row-fluid">
        <div class="span4">
          <h2>Element 1 </h2>
          <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
          <p><a class="btn" href="#">View details &raquo;</a></p>
        </div>
        <div class="span4">
          <h2>Element 2</h2>
          <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
          <p><a class="btn" href="#">View details &raquo;</a></p>
       </div>
        <div class="span4">
          <h2>Element 3</h2>
          <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.</p>
          <p><a class="btn" href="#">View details &raquo;</a></p>
        </div>
      </div>

      <hr>

      <div class="footer">
        <p>&copy; Hicham Lakhdar 2014</p>
      </div>

    </div> <!-- /container -->

    </form>
    
</body>
</html>


Demo.aspx.cs
using BootstrapNavigation;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Demo
{
    public partial class Demo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

            if (!IsPostBack)
            {
                bootstrapMenu navigationmenu = new bootstrapMenu();
                navigationmenu.MenuList = ListeMenus();
                ph.Controls.Add(navigationmenu);
            }
        }

        //Fill menu list.
        private List<NavItem> ListeMenus()
        {
            List<NavItem> list = new List<NavItem>();

            NavItem np = new NavItem();
            np.Id = 1;
            np.Nom = "Home";
            np.Description = "Home";
            np.IsParent = true;
            list.Add(np);

            for (int i = 1; i < 5; i++)
            {
                NavItem n = new NavItem();
                n.Id = i;
                n.Nom = "Menu " + i;
                n.Description = " Menu " + i;
                n.ParentId = 0;
                n.IsParent = true;
                list.Add(n);
            }
            np = new NavItem();
            np.Id = 6;
            np.Nom = "Item 1";
            np.Description = "Item 1";
            np.IsParent = false;
            np.ParentId = 3;
            list.Add(np);

            np = new NavItem();
            np.Id = 7;
            np.Nom = "Item 2";
            np.Description = "Item 3";
            np.IsParent = false;
            np.ParentId = 3;
            list.Add(np);

            np = new NavItem();
            np.Id = 8;
            np.Nom = "Item 3";
            np.Description = "Item 3";
            np.IsParent = false;
            np.ParentId = 3;
            list.Add(np);


            np = new NavItem();
            np.Id = 9;
            np.Nom = "Item 1";
            np.Description = "Item 1";
            np.IsParent = false;
            np.ParentId = 4;
            list.Add(np);

            np = new NavItem();
            np.Id = 10;
            np.Nom = "Item 1";
            np.Description = "Item 1";
            np.IsParent = false;
            np.ParentId = 4;
            list.Add(np);

            return list;
        }
    }
}





Download Control DLL : dll

Download Code source :BootstrapNavigation_ServerControl

Download demo 1: BootstrapNavigation_DemoWithDLL

Download demo 2: BootstrapNavigation_DemoWithCode


lundi 8 décembre 2014

Utilisation Bundling et minification ASP.NET 4 WebForms

Bundling et Minification sont deux techniques que vous pouvez utiliser dans ASP.NET 4 pour améliorer la performance. Bundling et Minification améliore le temps de chargement en réduisant le nombre de requêtes vers le serveur.
Bundling vous permet de combiner plusieurs JavaScript ou CSS fichiers en un seul package.
Minify réduise le nombre de requêtes HTTP que les navigateurs ont à faire, ce qui réduit la taille des fichiers, et améliorer la performance de l'ensemble du site.

Ajouter de référence à la bibliothèque System.Web.Optimization:


System.Web.Optimization n'est pas une partie du FrameWork .NET 4 . Mais vous pouvez l'ajouter avec NuGet Package.

Pour lancer NuGet Package Boutton droite sur le projet => Manage NuGet Package

Installation NuGet Package ASP.NET



Rechercher et installer Microsoft.AspNet.Web.Optimization sur NuGet Package


Installation NuGet Package ASP.NET



Les nouveau Références ajoutés :


Add réference ASP.NET

Création des Bundles:

  1. Créer un dossier App_Start (si n'exist pas)
  2. Créer un classe BundleConfig sur le dossier App_Start.
     Script et CSS Bundles
       Ici on crée un bundles pour le fichier jquery-1.7.1.js et le fichier site.css


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Optimization;

namespace Bundles_Minification
{
    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles)
        {

            bundles.Add(new ScriptBundle("~/bundles/js").Include(
                "~/Scripts/jquery-1.7.1.js"));
            bundles.Add(new StyleBundle("~/Styles/css").Include("~/Styles/site.css"));
        }
    }
}

 

     3. Aller sur le fichier Global.asax puis modifier la fonction Application_Start
     inscrire les bundles :



  void Application_Start(object sender, EventArgs e)
        {
            // Code that runs on application startup
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }


     4.  Maintenant, vous pouvez ajouter le style et les scripts bundles que vous avez créés ci-dessus à la page comme indiqué ci-dessous:



<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="demo.aspx.cs" Inherits="Bundles_Minification.demo" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
        <asp:PlaceHolder ID="PlaceHolder1" runat="server">     
          <%: Scripts.Render("~/bundles/js") %>

          <%: Styles.Render("~/Styles/css") %> 
    </asp:PlaceHolder> 
</head>
<body class="maroonbg">
    <form id="form1" runat="server">
    <div>
            Demo utilisation Bundling et Minifiation ASP.NET 4 WebForms
    </div>
    </form>
</body>
</html>



Notes:
    Vous devez activer le mode debug sur le web.config et ajouter ces namesspaces:

<system.web>
    <compilation debug="true" targetFramework="4.5.3" />
    <httpRuntime targetFramework="4.5.3" />
    <pages>
      <namespaces>
        <add namespace="System.Web.Optimization" />
      </namespaces>
      <controls>
        <add assembly="Microsoft.AspNet.Web.Optimization.WebForms" namespace="Microsoft.AspNet.Web.Optimization.WebForms" tagPrefix="webopt" />
      </controls>
    </pages>
  </system.web>







Code source : Bundling_Minification_Asp.netVS2012

mercredi 12 février 2014

HttpHandler for File Security and Download

HttpHandler pour la Securité des fichiers et le télechargement

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Web;
  5. using System.Web.Routing;
  6. namespace Security_HttpHandler
  7. {
  8.     public class DownloadHandler : IHttpHandler
  9.     {
  10.         #region action methods
  11.         /// <summary>
  12.         /// Enables processing of HTTP Web requests by a custom HttpHandler that implements the System.Web.IHttpHandler interface.
  13.         /// </summary>
  14.         /// <param name="context">An System.Web.HttpContext object</param>
  15.         public void ProcessRequest(HttpContext context)
  16.         {
  17.             context.Response.AddHeader("cache-control""must-revalidate");
  18.             //This is used to verify if user is connected
  19.             //if (!context.User.Identity.IsAuthenticated)
  20.             //{
  21.             //    context.Response.StatusCode = 403;
  22.             //    context.Response.StatusDescription = "Forbidden";
  23.             //    return;
  24.             //}
  25.             string file = context.Request.QueryString["file"];
  26.             if (string.IsNullOrWhiteSpace(file))
  27.             {
  28.                 context.Response.StatusCode = 400;
  29.                 context.Response.StatusDescription = "Bad Request";
  30.                 return;
  31.             }
  32.             string directory = context.Server.MapPath("~/App_Data/Docs/");
  33.             string fileName = System.IO.Path.Combine(directory, file);
  34.             if (!System.IO.File.Exists(fileName))
  35.             {
  36.                 context.Response.StatusCode = 404;
  37.                 context.Response.StatusDescription = "Not Found";
  38.                 return;
  39.             }
  40.             bool isAttachment;
  41.             string contentType = GetContentType(new System.IO.FileInfo(fileName).Extensionout isAttachment);
  42.             if (contentType == "NotAutorized")
  43.             {
  44.                 context.Response.StatusCode = 400;
  45.                 context.Response.StatusDescription = "This Contenttype not autorized";
  46.                 return;
  47.             }
  48.             context.Response.AppendHeader("content-disposition"string.Format("{0}filename={1}", isAttachment ?"attachment;" : "", EncodeFileNameForMimeHeader(file)));
  49.             context.Response.ContentType = contentType;
  50.             try
  51.             {
  52.                 context.Response.WriteFile(fileName);
  53.             }
  54.             finally
  55.             {
  56.                 context.Response.Flush();
  57.             }
  58.         }
  59.         /// <summary>
  60.         /// Gets a value indicating whether another request can use the System.Web.IHttpHandler instance.
  61.         /// </summary>
  62.         public bool IsReusable
  63.         {
  64.             get { return true; }
  65.         }
  66.         #endregion
  67.         #region private member functions
  68.         private static string EncodeFileNameForMimeHeader(string fileName)
  69.         {
  70.             var builder = new System.Text.StringBuilder(fileName.Length);
  71.             foreach (char ch in fileName)
  72.             {
  73.                 int num = Convert.ToInt32(ch);
  74.                 if ((((num >= 0x41) && (num <= 90)) || ((num >= 0x61) && (num <= 0x7a))) || (((num >= 0x30) &&(num <= 0x39)) || ((num == 0x20) || (num == 0x2e))))
  75.                 {
  76.                     builder.Append(ch);
  77.                 }
  78.                 else
  79.                 {
  80.                     char[] chars = new char[] { ch };
  81.                     foreach (byte num2 in System.Text.Encoding.UTF8.GetBytes(chars))
  82.                     {
  83.                         builder.Append("%");
  84.                         builder.Append(num2.ToString("X"System.Globalization.CultureInfo.InvariantCulture));
  85.                     }
  86.                 }
  87.             }
  88.             return builder.ToString();
  89.         }
  90.         private static string GetContentType(string Extension, out bool isAttachment)
  91.         {
  92.             isAttachment = true;
  93.             switch (Extension.ToLowerInvariant())
  94.             {
  95.                 case ".txt":
  96.                     isAttachment = false;
  97.                     return "text/plain";
  98.                 case ".doc":
  99.                 case ".dot":
  100.                     return "application/msword";
  101.                 case ".docx":
  102.                     return "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
  103.                 case ".dotx":
  104.                     return "application/vnd.openxmlformats-officedocument.wordprocessingml.template";
  105.                 case ".xls":
  106.                 case ".xlt":
  107.                     return "application/vnd.ms-excel";
  108.                 case ".xlsx":
  109.                     return "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
  110.                 case ".xltx":
  111.                     return "application/vnd.openxmlformats-officedocument.spreadsheetml.template";
  112.                 case ".ppt":
  113.                     return "application/vnd.ms-powerpoint";
  114.                 case ".pptx":
  115.                     return "application/vnd.openxmlformats-officedocument.presentationml.presentation";
  116.                 case ".pdf":
  117.                     return "application/pdf";
  118.             }
  119.             return "NotAutorized";
  120.         }
  121.         #endregion
  122.     }
  123. }