Могу ли я каким-то образом поддерживать поведение привязки параметров действия MVC 4 в ASP. NET Core 2.1? - PullRequest
2 голосов
/ 14 апреля 2020

Я перевожу ASP. NET MVC 4 приложения на ASP. NET Core 2.1 и почти все идет хорошо.

У меня есть контроллер с действием который выглядит следующим образом:

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

Model:

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

Я могу отправить тело json, которое содержит любое из свойств Model с комбинацией параметры запроса и MVC 4 всегда будут правильно связывать тело с model, key1 и key2.

Наиболее необходимый тип запроса, который работает в MVC 4, выглядит следующим образом:

POST /SomeApi/Post

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

или примерно так:

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

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

Обратите внимание на вложенные model значение в json.

Это будет правильно привязано к соответствующим параметрам действия, но оно не включено ASP. NET Core 2.1 , по крайней мере по умолчанию.

Что такое очевидно работает в ASp. NET Core 2.1:

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

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

Вопрос: могу ли я каким-то образом поддерживать поведение привязки MVC 4 в ASP. NET Core 2.1, так что я надеваю не нужно переписывать огромное количество запросов внешнего интерфейса и / или внутреннего моделирования?

1 Ответ

1 голос
/ 15 апреля 2020

Измените тип параметра приема (добавьте [Frombody] перед параметром):

Создайте новую модель , чтобы поместить в нее три параметра как поля:

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

Контроллер:

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

Вот результат теста:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...