Utiliser oData avec MVC4 WebAPI

 20/05/2015 |   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 >>

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

 20/05/2015 |   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 >>

Comparer 2 objets en .Net avec la réfléxion

 28/04/2015 |   Admin |  C#


Dans cet article nous allons voir comment comparer les propriétés de 2 objets en c# en utilisant la réflexion.

Nous allons utiliser le package KellermanSoftware.CompareNetObjects pour cela.

Et comparer deux objets de type "Person" avec une "Adresse" pour utiliser la comparaison des propriétés "enfant"

Classe Person et Address:
namespace PocCompareReflection
{
    public class Person
    {
        public string Name { get; set; }
  
        public DateTime DateCreated { get; set; }
  
        public int Age { get; set; }
  
        public Address Address { get; set; }
    }
  
    public class Address
    {
        public string City { get; set; }
  
        public List<string> Phones { get; set; }
    }
}
Et une application console pour éxécuter la comparaison:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using KellermanSoftware.CompareNetObjects;
  
namespace PocCompareReflection
{
    class Program
    {
        static void Main(string[] args)
        {
            CompareObjects compareObjects = new CompareObjects();
 // Objet 1
            Person person1 = new Person();
            person1.DateCreated = DateTime.Now;
            person1.Age = 29;
            person1.Name = "Jean";
          
...

Lire >>

Exemples d'utilisation de la réflexion en c#

 28/04/2015 |   Admin |  C#


A - Obtenir les valeurs des propriétés d'une classe (avec un type inconnu)

Dans cet exemple nous allons etre capable de lire les valeurs d'une propriété passée en parametre. Dans une liste de type inconnu.

public static void GetProperties<T>(List<T> result, string property)
 
{
 
foreach (var item in result)
 
{
 
PropertyInfo[] properties = item.GetType().GetProperties();
 
var propInfoObj = properties.Where(p => p.Name.ToLower() == property.ToLower()).FirstOrDefault();
 
object propValue = item.GetType().InvokeMember(propInfoObj.Name, BindingFlags.GetProperty, null, item, null);
 
}
 
}

B - Remplir une DropDownList avec les propriétés d'une classe de type static

FieldInfo[] properties = typeof(VotreClasse).GetFields();
 
var flds = properties.Where(p => p.IsStatic);
 
foreach (var item in flds)
 
{
 
ddlType.Items.Add(new ListItem() { Text = item.Name, Value = item.GetValue(null).ToString() });
 
}

Pour toute question laisser un commentaire

Lire >>

Exemples d'utilisation des expressions régulières en c#

 28/04/2015 |   Admin |  C#

Tags: regex

Dans ce post j'ajouterais de temps en temps les exemples d'expressions régulières que j'utilise

Récupérer les valeurs d'un tag html href

Ici, on va récupérer les valeurs des href seulement si la chaine de caractere contient .xls ou.pdf et si le lien se termine bien par .xls ou .pdf

string[] extensions = { ".xls", ".pdf" };
if (extensions.Any(e=>htmlContent.Contains(htmlContent)))
{
Match m;
string HRefPattern = "href\\s*=\\s*(?:[\"'](?<1>[^\"']*)[\"']|(?<1>\\S+))";
m = Regex.Match(htmlContent, HRefPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
  
while (m.Success)
{
if (extensions.Any(e => m.Groups[1].ToString().EndsWith(e)))
{
theValue =  m.Groups[1] ;
}
 m = m.NextMatch();
}
}

Lire >>

Obtenir mon adresse ip public en c#

 28/04/2015 |   Admin |  C#


La meilleure facon d'obtenir son adresse ip public c'est de le demander a quelqu'un d'autre

Voici le code qui va donner votre adresse ip public

public string GetPublicIP()
{
string result = string.Empty;
WebRequest request = WebRequest.Create("http://checkip.dyndns.org/");
using (WebResponse response = request.GetResponse())
using (StreamReader stream = newStreamReader(response.GetResponseStream()))
{
result = stream.ReadToEnd();
}
 //Search for the ip in the html
int first = result.IndexOf("Address: ") + 9;
int last = result.LastIndexOf("</body>");
result = result.Substring(first, last - first);
  
return result;
}

Lire >>

MVC Forcer la redirection vers www avec un filtre

 21/04/2015 |   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 >>

Vider le cache d'une application .Net en recyclant le pool d'application (Flush cache)

 21/04/2015 |   Admin |  C#


Méthode un peu violente mais efficace si besoin de redémarrer le pool d'application

HttpRuntime.UnloadAppDomain();

Lien msdn: http://msdn.microsoft.com/fr-fr/library/system.web.httpruntime.unloadappdomain(v=vs.110).aspx

Lire >>