none
MVC4 : Binding des paramètres RRS feed

  • Question

  • Bonjour,

    je suis en train de migrer notre application de MVC3 vers MVC4 et je me retrouve confronté à un comportement bizarre.

    Je précise que tout fonctione parfaitement en MVC3, et un projet vide MVC4 permet de reproduire ce "bug" très facilement.

    J'ai un controller qui possède une action dont la signature est la suivante :

    public JsonResult Edit(int id, string name, int criticality, DateTime? end, Dictionary<Guid, string> conditions, Dictionary<Guid, string> exceptions)

    Et j'appelle cette action en JSON (reproductible via Fiddler par exemple). Les appels suivants fonctionnent très bien :

    Host: localhost:13497
    Accept: application/json, text/javascript, */*; q=0.01
    X-Requested-With: XMLHttpRequest
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36
    Content-Type: application/json
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
    Content-Length: 222
    
    {"name":"test","criticality":32,"end":null,"conditions":[{"Key":"de7ddf71-0a60-4c33-804d-287d3b8d48d2","Value":"[\"Value\"]"}],"exceptions":[{"Key":"de7ddf71-0a60-4c33-804d-287d3b8d48d0","Value":"[\"Value2\"]"}]}
    ou
    Host: localhost:13497
    Accept: application/json, text/javascript, */*; q=0.01
    X-Requested-With: XMLHttpRequest
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36
    Content-Type: application/json
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
    Content-Length: 155
    
    {"name":"test","criticality":32,"end":null,"conditions":[{"Key":"de7ddf71-0a60-4c33-804d-287d3b8d48d2","Value":"[\"Value\"]"}],"exceptions":null}

    Par contre, dès lors que je fournis un dictionnaire de taille 0, MVC4 plante sur une erreur de cast.

    Host: localhost:13497
    Accept: application/json, text/javascript, */*; q=0.01
    X-Requested-With: XMLHttpRequest
    User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36
    Content-Type: application/json
    Accept-Encoding: gzip,deflate,sdch
    Accept-Language: fr-FR,fr;q=0.8,en-US;q=0.6,en;q=0.4
    Content-Length: 87
    
    {"name":"test","criticality":32,"end":null,"conditions":[],"exceptions":null}

    En modifiant mes Dictionary<Guid, string> en Dictionary<string, string>, je m'apperçois que MVC4 tente d'alimenter mes dictionnaires avec les paramètres de routage :

    Ce comportement n'existait pas dans notre projet en MVC3. Quelqu'un saurait pourquoi MVC4 se comporte ainsi ?

    Par avance, merci.

    vendredi 22 novembre 2013 10:55

Réponses

Toutes les réponses