MVC Forcer la redirection vers www avec un filtre

 01/01/2019 |   Admin |  C#


Créer une classe ForceWWW.cs dans le dossier App_Start de votre solution

namespace xxx.Web.App_Start
{
    using System.Web.Mvc;
 
    public class ForceWWW : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (!filterContext.RequestContext.HttpContext.Request.IsLocal)
            {
                string url = filterContext.RequestContext.HttpContext.Request.Url.AbsoluteUri;
                if (!filterContext.RequestContext.HttpContext.Request.Url.AbsoluteUri.Contains("www"))
                {
                    url = url.Replace("http://", "http://www.");
                    url = url.Replace("https://", "https://www.");
                    filterContext.Result = new RedirectResult(url, true);
                }
            }
            base.OnActionExecuting(filterContext);
        }
    }
}

Puis dans la classe FilterConfig.cs, ajouter le filtre fraichement créé

filters.Add(new ForceWWW());

Lire >>

Calculer la distance entre deux points en .Net avec la formule de Haversine

 01/01/2019 |   Admin |  C#


Voici une méthode écrite en c# permettant de calculer la distance entre 2 coordonnées (latitude / longitude). Résulat en kilometres.

Idéal pour la géolocalisation mobile.

(Pour les fans de maths : http://en.wikipedia.org/wiki/Haversine_formula)

///<summary>
/// Get distance between 2 points in kilometers
///</summary>
///<param name="latitudePointA">Latitute point A</param>
///<param name="longitudePointA">Longitute point A</param>
///<param name="latitudePointB">Latitude point B</param>
///<param name="longitudePointB">Longitude point B</param>
///<returns>The distance</returns>
public static double GetDistanceBetween(double latitudePointA, double longitudePointA, double latitudePointB, double longitudePointB)
{
    double dDistance = Double.MinValue;
  
    // Convert coordinates to radians
    double dLatAInRad = latitudePointA * (Math.PI / 180.0);
    double dLongAInRad = longitudePointA * (Math.PI / 180.0);
    double dLatBInRad = latitudePointB * (Math.PI / 180.0);
    double dLongBInRad = longitudePointB * (Math.PI / 180.0);
  
    double dLongitude = dLongBInRad - dLongAInRad;
    double dLatitude = dLatBInRad - dLatAInRad;
  
    // Intermediate result a.
    double a = Math.Pow(Math.Sin(dLatitude / 2.0), 2.0) +
               
...

Lire >>

Utiliser oData avec MVC4 WebAPI

 01/01/2019 |   Admin |  C#


Par défaut WebAPI retourne une liste de type IEnumerable.

L'avantage d'utiliser des requetes au format oData est de pouvoir "requéter" directement dans l'url (order by, top, ...).

Pour activer oData il suffit juste de remplacer IEnumerable par IQueryable.

Ne pas oublier l'attribut [Queryable] pour que le client puisse utiliser les requetes oData

[AcceptVerbs("GET")]
[Queryable]
public IQueryable<Contact> GetAll()
{
List<Contact> contacts = new List<Contact>();
  
Contact ct1 = new Contact ()
{
Name = "Pierre",
PictureUrl = http://www.serveur.com/images/pierre1.jpg
};
  
Contact ct2 = new Contact ()
{
Name = "Paul",
PictureUrl = http://www.serveur.com/images/paul1.jpg
};
  
Contact ct3 = new Contact ()
{
Name = "Jacques",
PictureUrl = http://www.serveur.com/images/jacques1.jpg
};
  
 
contacts.Add(ct1);
contacts.Add(ct2);
contacts.Add(ct3);
  
return contacts.AsQueryable<Contact>();
}

On peut maintenant utiliser ce genre de requetes : http://localhost:1003/api/contacts?$orderby=name desc

Lire >>

Spam checker API avec ASP.NET C# - Comment éviter le SPAM avec stopforumspam

 01/01/2019 |   Admin |  C#


Avoir rencontré plusieurs problemes de spam dans certaines de mes applications j'ai décidé de me pencher sur le sujet. Apres avoir étudié différentes solutions je décide d'utiliser l'API gratuite du site stopforumspam.

Elle est gratuite, simple d'utilisation et communautaire, c'est pourquoi il ne faut pas hésiter a envoyer la liste de ses potentiels spammeurs sur ce forum.

Il y a juste une limite de 20000 requets a ne pas dépasser par jour, ce qui est correcte.

Pour moi le nom d'utilisateur n'est pas assez fiable pour savoir si c'est un spam ou non. C'est pourquoi la détection va se faire premierement par l'adresse IP de l'utilisateur puis par l'email.

Cette API est tres fiable mais l'adresse IP peut etre lié a un autre utilisateur par exemple. Si vous voulez filtrer des commentaires je vous conseille donc de ne pas les supprimer mais de les marquer avec un tag IsSpam = 1

C'est cadeaux, voici la classe:

///<summary>
/// SpamChecker class
///</summary>
public class SpamChecker
{
    ///<summary>
    /// Check if the comment is inside the spam list
    ///</summary>
    ///<param name="ip">The ip to test</param>
    ///<param name="email">The email to test</param>
    ///<returns>True if it's a spam</returns>
    public static bool Check(string ip, string email)
 
...

Lire >>

Liste des couleurs de windows 8 - Tuiles pour le style metro

 01/01/2019 |   Admin |  ASP MVC


Ce post me sert de post-it pour avoir la liste des couleurs standards de windows 8

Couleur

RGB

Hexa

Apercu

Violet (Purple) 162 0 255 A200FF  
Magenta 255 0 151 FF0097  
Turquoise (Teal) 0 171 169 00ABA9  
Citron (Lime) 140 191 38 8CBF26  
Marron (Brown) 160 80 0 A05000  
Rose (Pink) 230 113 184 E671B8  
Orange 240 150 9 F09609  
Bleu (Blue) 27 161 226 1BA1E2  
Rouge (Red) 229 20 0 E51400  
Vert (Green) 51 153 51 339933  

Lire >>

JQuery - Javascripts tricks

 01/01/2019 |   Admin |  Javascript


Supprimer tous les tags HTML d'une chaine de caracteres :

var stringWithoutHtmlTags = OriginalStringWithTags.replace(/(<([^>]+)>)/ig,"");

 

Utiliser replace all avec javascript, ex : Remplacer tous les points d'une chaine de caractere:

var chaineSansPoints = chaineAvecPoints.Replace(/\./g, "");

Replace(".","") remplacera seulement le premier point

 

Tester une date en jQuery avec une expression réguliere

- Fonction javascript

function testDate(str) {
   var m = str.match(/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/);
   return (m) ? new Date(m[3], m[2] - 1, m[1]) : null;
}

- Utilisation

if (testDate(date) == null) {
    // Date false  

} else {
     // Date true

}

 

Tester si une chaine de caractere contient une sous chaine de caracteres (String contains substring)

if ($("#spnMessage").text().toLowerCase().indexOf("error") >= 0) {
…
}

 

Lire et obtenir le parametre dans une url (get query string parameter)

function getParameterByName(name) {
var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search);
return match && decodeURIComponent(match[1].replace(/\+/g, ' '));
}

 

Ajouter et supprimer une classe en jQuery

$("#theTextBox").addClass('highlightErrors');
 
$("#theTextBox").removeClass('highlightErrors');

 

Déclencher

...

Lire >>

Liste des symboles HTML

 01/01/2019 |   Admin |  ASP MVC


(En cours)

 Caractere - description

 Entité

 Decimal

 Hexa

 Apercu

Fleche gauche (leftwards arrow) &larr; &#8592; &#x2190;
Fleche haut (upwards arrow) &uarr; &#8593; &#x2191;
Fleche droite (rightwards arrow) &rarr; &#8594; &#x2192;
Fleche bas (downwards arrow) &darr; &#8595; &#x2193;
Fleche droite gauche (left right arrow) &harr; &#8596; &#x2194;
Fleche entrée (carriage return) &crarr; &#8629; &#x21B5;
Double fleche gauche (leftwards double arrow) &lArr; &#8656; &#x21D0;
Double fleche haut (upwards double arrow) &uArr; &#8657; &#x21D1;
Double fleche droite (rightwards double arrow) &rArr; &#8658; &#x21D2;
Double fleche bas (downwards double arrow) &dArr; &#8659; &#x21D3;  
Double fleche droite gauche (left right double arrow) &hArr; &#8660; &#x21D4;
Alpha (Grecque) &Alpha; &#913; &#x391;  Α
Beta (Grecque) &Beta; &#914; &#x392;  Β
Gamma (Grecque) &Gamma; &#915; &#x393;  Γ
Delta (Grecque) &Delta; &#916; &#x394;  Δ
Epsilon (Grecque) &Epsilon; &#917; &#x395;  Ε
Zeta (Grecque) &Zeta; &#918; &#x396;  Ζ
Eta (Grecque) &Eta; &#919; &#x397;  Η
Theta (Grecque) &Theta; &#920; &#x398;  Θ
Sigle Copyright &copy; &#169; &#xa9; ©
Coeur &hearts; &#9829; &#x2665;

Lire >>

ExecuteNonQuery retourne toujours -1 avec procédure stockée

 01/01/2019 |   Admin |  Sql Server


Si executeNonQuery retourne toujours -1, en général c'est une erreur toute bete liée a votre procédure stockée.

Si vous avez laissé le SET NOCOUNT ON le probleme est reglé, il suffit de supprimer cette ligne.

Cette commande indique a sql serveur d'arreter d'afficher le message contenant le nombre de lignes affectées

Lire >>