Использование MVC Core Api RequestModel с GET-запросом и как должен выглядеть URI? - PullRequest
0 голосов
/ 11 декабря 2018

Рассмотрим следующий пример:

[HttpGet("api/values/{id}")]
public ActionResult<string> Get(int id)
{
    return id
}

Вышеописанное будет работать без проблем, однако я хочу изменить это так, чтобы оно позволяло, скажем, для аргумента 10 параметров.Я пытаюсь понять в успокоительном сценарии API, как это достигается.

Первый вопрос: как это выглядит на стороне URI?api/values/5/testOne/TestTwo/?Что если testOne имеет значение null?Так я должен использовать параметры запроса тогда?api/values/5/?testOne=abc&testTwo=123

Во-вторых, могу ли я обернуть это в то, что я называю моделью запроса.Пример: Допустим, у меня есть модель запроса, подобная этой:

public class TestRequestModel
{
    public int Id { get; set; }
    public string TestOne { get; set; }
    public string TestTwo { get; set; }
}

И, допустим, я хочу включить ее:

[HttpGet("api/values/{id}/{testOne}/{testTwo}")]
public ActionResult<string> Get(TestRequestModel requestModel)
{
    return requestModel.Id
}

Приведенный выше {id} не будет сопоставлен с requestModle.Id, и не будет других параметров.Мой второй вопрос: как мне добиться этой привязки в GET-запросе?

1 Ответ

0 голосов
/ 11 декабря 2018

При настройке URL-адресов в соответствии с правилами отдыха вы можете получить такие параметры URL, как этот

[HttpGet("api/values/{id:int}/{testOne:(type)}/{testTwo(type)}")]

Вы должны устанавливать типы типов, если параметр запроса не является строкой.И вы можете получить эти значения следующим образом:

HttpGet("api/values/{id:int}/{testOne:type}/{testTwo:type}")]
public ActionResult<string> Get(int id, type testOne, type testTwo)
{
    TestRequest model = new TestRequestModel();
    request.id = id;
    request.TypeOne = typeOne;
    .....
}

Причина, по которой мы явно сопоставили параметры запроса, заключается в том, что в .net нет встроенной поддержки для сопоставления параметров запроса с классом.Также вы можете получить требуемые значения из класса и использовать этот тип для получения параметров.Но таким образом, вы должны установить эти параметры в FormData, а не в строке запроса.Надеюсь, это поможет.

...