2 votes

Puis-je d'une manière ou d'une autre soutenir le comportement de liaison de paramètres d'action MVC 4 dans ASP.NET Core 2.1?

Je migre une application ASP.NET MVC 4 vers ASP.NET Core 2.1 et jusqu'à présent, presque tout se passe bien.

J'ai un contrôleur avec une action qui ressemble à ceci :

public class SomeApiController : Controller
{
public ActionResult Post(Model model, int key1, string key2)
{
model.Key1 = key1;
model.Key2 = key2;
return Json(model);
}
}

Le Model est :

public class Model
{
public string Text { get; set; }
public int Number { get; set; }
public int Key1 { get; set; }
public string Key2 { get; set; }
}

Je peux envoyer un corps json qui contient n'importe laquelle des propriétés de Model avec une combinaison de paramètres de requête et MVC 4 liera toujours correctement le corps à model, key1 et key2.

Le type de requête le plus nécessaire qui fonctionne dans MVC 4 ressemble à ceci :

POST /SomeApi/Post

{
"model": {
"text": "some-text",
"number": 1
},
"key1": 42,
"key2": "some-text-2"
}

ou comme ceci :

POST /SomeApi/Post?key1=42&key2=some-text-2

{
"model": {
"text": "some-text",
"number": 1
}
}

Veuillez prêter attention à la valeur model imbriquée dans le json.

Cela sera correctement lié aux paramètres d'action appropriés, mais cela ne fonctionne pas sur ASP.NET Core 2.1, du moins par défaut.

Ce qui fonctionne évidemment dans ASP.NET Core 2.1 :

POST /SomeApi/Post?key1=42&key2=some-text-2

{
"text": "some-text",
"number": 1
}

Question : est-il possible de somehow supporter le comportement de liaison de MVC 4 dans ASP.NET Core 2.1 afin de ne pas avoir à réécrire une énorme quantité de requêtes frontend et/ou de modélisation backend ?

1voto

LouraQ Points 5022

Change the receive parameter type(add [Frombody] before parameter):

Créez un nouveau modèle pour mettre les trois paramètres en tant que champs :

public class NewModel
{
    public Model model { get; set; }
    public int key1 { get; set; }
    public string key2 { get; set; }
}

Contrôleur :

 public IActionResult Post([FromBody]NewModel newModel)
    {
        Model model = newModel.model; 
        model.Key1 = newModel.key1;
        model.Key2 = newModel.key2;
        return Json(model);
    }

Voici le résultat du test :

entrer la description de l'image ici

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X