ASP.NET MVC

5 articles

Requêtes HTTP lentes dans .NET

Dans un contexte d’une étude sur les performances d’une application web, j’ai remarqué des retards constants d’environ 200ms sur certains appels HTTP qui utilisaient une API externe.

L’application web et l’API étaient sur le même segment de réseau et donc la latence du réseau était hors de question.
De plus la cible API a précédemment fait l’objet de tests de charge jMeter et éprouvée pour gérer 1500req/s.

Ce qui était encore plus étrange dans cette situation, c’est que seules les requêtes POST présentaient ce retard de 200ms. Les requêtes GET étaient rapides comme prévu.

Poursuivre la lecture

Exemple de projet MVC (mis à jour)

J’ai mis à jour le projet MVC échantillon que j’ai écrit pour l’utilisation d’ASP.NET MVC 3 et le moteur d’affichage Razor.

Un changement mineur, c’est que je n’utilise plus le FluentValidationModelValidatorProvider mais le standard. Donc j’ai décorer le modèle d’affichage avec les annotations de données nécessaires :

 

[Validator(typeof(UserViewModelValidator))]
public class UserViewModel
{
    public int Id { get; set; }

    [DisplayName("First name *")]
    public string FirstName { get; set; }

    [DisplayName("Last name *")]
    public string LastName { get; set; }

    public int? Age { get; set; }
}

Poursuivre la lecture

Quelles fonctionnalités aimeriez-vous voir dans ASP.NET MVC 4 ?

S’il y avait une seule fonction que je voudrais voir dans ASP.NET MVC 4, ce serait de voir supprimer/déprécier les ViewBag et ViewData.
Ces deux concepts conduisent à du code très laid selon mon point de vue.
Voici ce que je déteste le plus dans les ViewBag et ViewData :
  • Ils ne sont pas fortement typés et vous devez effectuer un Cast dans vos vues afin d’obtenir le type réel
  • Ils ne sont pas refactorisables car ils s’appuient sur les « magic strings »
  • Ils conduisent à des tests unitaires fragiles en raison des « magic strings »
  • Ils conduisent au code spaghetti dans les vues

Voici le patch de diff, que je serais ravi de voir appliqué pour la classe ViewDataDictionary.cs dans ASP.NET MVC 4 :

diff --git ViewDataDictionary.cs ViewDataDictionary.cs
index 4c6299f..1965e3e 100644
--- ViewDataDictionary.cs
+++ ViewDataDictionary.cs
@@ -95,12 +95,10 @@ namespace System.Web.Mvc {
 
         public object this[string key] {
             get {
-                object value;
-                _innerDictionary.TryGetValue(key, out value);
-                return value;
+                throw new Expcetion("Don't use ViewData");
             }
             set {
-                _innerDictionary[key] = value;
+                throw new Expcetion("Don't use ViewData");
             }
         }
 
Et vous qu’en pensez-vous ?

Upload de plusieurs fichiers avec c#

Avez-vous déjà été dans une situation où vous avez besoin pour télécharger plusieurs fichiers à un hôte distant et passer des paramètres supplémentaires dans la requête ? Malheureusement il n’y a rien dans la BCL qui nous permet d’atteindre cet objectif hors de la boîte.

Nous avons la méthode UploadFile , mais il est limité à un seul fichier et ne nous permet pas de passer des paramètres supplémentaires. Alors allons-y et écrire de telle méthode. L’élément important est que cette méthode doit être conforme RFC 1867 afin que le serveur web distant peut analyser correctement les informations.

Tout d’abord, nous définissons un modèle représentant un seul fichier à télécharger :

    public class UploadFile
    {
        public UploadFile()
        {
            ContentType = "application/octet-stream";
        }
        public string Name { get; set; }
        public string Filename { get; set; }
        public string ContentType { get; set; }
        public Stream Stream { get; set; }
    }

Poursuivre la lecture

Comment nous faisons de l’ASP.NET MVC

Sample MVC Solution

In this post I will show a sample ASP.NET MVC 2.0 project structure illustrating different concepts such as data access, user input validation and mapping between the domain and the view model. The project is still under construction but the source code is available at github.

I will illustrate the usage of the following frameworks:

  • MvcContrib bringing useful extension methods and strongly typed helpers to ASP.NET MVC
  • AutoMapper enabling easy mapping between the domain and the view models
  • FluentValidation – a small validation library for .NET that uses a fluent interface and lambda expressions for building validation rules for your business objects
  • NHibernate – a popular ORM in the .NET world
  • FluentNHibernate – a statically compiled alternative to NHibernate’s standard hbm xml mapping
  • Spring.NET – object container and dependency Injection framework for .NET
  • Rhino.Mocks – A dynamic mock object framework for the .Net platform. It’s purpose is to ease testing by allowing the developer to create mock implementations of custom objects and verify the interactions using unit testing

 

Armed with this arsenal of frameworks let’s start exploring the solution structure. I’ve opted for 2 projects solution but in many real world applications more levels of abstraction could be brought to the business layer. Personally I favor to have less big assemblies rather than many small assemblies into the solution. Fewer the assemblies, faster the load time and faster the IDE. In this case particular attention should be brought to bring proper separation of concerns inside the same assembly

 

ASP.Net MVC project structure

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Poursuivre la lecture