将MVC Core Api RequestModel与GET Request一起使用,URI应该是什么样子



考虑以下示例:

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

以上内容将毫无问题地工作,然而,我希望更改它,以便它允许10个参数。我试图在一个restful 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请求中实现绑定?

根据rest实践设置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中设置这些参数,而不是在查询字符串中。希望这能有所帮助。

最新更新