将MVC Core Api RequestModel与GET Request一起使用,URI的外观如何?

时间:2018-12-11 16:37:37

标签: c# rest api asp.net-core-mvc restful-url

考虑以下示例:

[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 :(得分:0)

根据其他习惯设置网址时,您可以获得这样的网址参数

[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中而不是在查询字符串中设置这些参数。希望这会有所帮助。