mst*_*and 73 c# asp.net-core asp.net-core-routing
如何将多个参数传递给MVC 6控制器中的Get方法.例如,我希望能够拥有如下内容.
[Route("api/[controller]")]
public class PersonController : Controller
{
public string Get(int id)
{
}
public string Get(string firstName, string lastName)
{
}
public string Get(string firstName, string lastName, string address)
{
}
}
Run Code Online (Sandbox Code Playgroud)
所以我可以查询一下.
api/person?id=1
api/person?firstName=john&lastName=doe
api/person?firstName=john&lastName=doe&address=streetA
Run Code Online (Sandbox Code Playgroud)
小智 68
你也可以用这个:
// GET api/user/firstname/lastname/address
[HttpGet("{firstName}/{lastName}/{address}")]
public string GetQuery(string id, string firstName, string lastName, string address)
{
return $"{firstName}:{lastName}:{address}";
}
Run Code Online (Sandbox Code Playgroud)
met*_*art 42
为什么不只使用一个控制器动作?
public string Get(int? id, string firstName, string lastName, string address)
{
if (id.HasValue)
GetById(id);
else if (string.IsNullOrEmpty(address))
GetByName(firstName, lastName);
else
GetByNameAddress(firstName, lastName, address);
}
Run Code Online (Sandbox Code Playgroud)
另一种选择是使用属性路由,但是您需要使用不同的URL格式:
//api/person/byId?id=1
[HttpGet("byId")]
public string Get(int id)
{
}
//api/person/byName?firstName=a&lastName=b
[HttpGet("byName")]
public string Get(string firstName, string lastName, string address)
{
}
Run Code Online (Sandbox Code Playgroud)
Mar*_*hes 34
要从URL解析搜索参数,您需要使用以下方法注释控制器方法参数[FromQuery]:
[Route("api/person")]
public class PersonController : Controller
{
[HttpGet]
public string GetById([FromQuery]int id)
{
}
[HttpGet]
public string GetByName([FromQuery]string firstName, [FromQuery]string lastName)
{
}
[HttpGet]
public string GetByNameAndAddress([FromQuery]string firstName, [FromQuery]string lastName, [FromQuery]string address)
{
}
}
Run Code Online (Sandbox Code Playgroud)
Seb*_*ian 26
我建议使用单独的 dto 对象作为参数:
[Route("api/[controller]")]
public class PersonController : Controller
{
public string Get([FromQuery] GetPersonQueryObject request)
{
// Your code goes here
}
}
public class GetPersonQueryObject
{
public int? Id { get; set; }
public string Firstname { get; set; }
public string Lastname { get; set; }
public string Address { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Dotnet 会将字段映射到您的对象。
这将使传递参数变得更加容易,并且会产生更清晰的代码。
Sun*_*ule 13
我认为最简单的方法是简单地使用AttributeRouting.
[Route("api/YOURCONTROLLER/{paramOne}/{paramTwo}")]
public string Get(int paramOne, int paramTwo)
{
return "The [Route] with multiple params worked";
}
Run Code Online (Sandbox Code Playgroud)
在 web api core 中使用多个参数调用 get
[ApiController]
[Route("[controller]")]
public class testController : Controller
{
[HttpGet]
[Route("testaction/{id:int}/{startdate}/{enddate}")]
public IEnumerable<classname> test_action(int id, string startdate, string enddate)
{
return List_classobject;
}
}
In web browser
https://Yourdomain/test/testaction/3/2010-09-30/2012-05-01
Run Code Online (Sandbox Code Playgroud)
最简单的方法,
控制器:
[HttpGet("empId={empId}&startDate={startDate}&endDate={endDate}")]
public IEnumerable<Validate> Get(int empId, string startDate, string endDate){}
Run Code Online (Sandbox Code Playgroud)
邮递员要求:
{router}/empId=1&startDate=2020-20-20&endDate=2020-20-20
Run Code Online (Sandbox Code Playgroud)
学习点:Controller 将接受请求的确切模式。
方法应该是这样的:
[Route("api/[controller]")]
public class PersonsController : Controller
{
[HttpGet("{id}")]
public Person Get(int id)
[HttpGet]
public Person[] Get([FromQuery] string firstName, [FromQuery] string lastName, [FromQuery] string address)
}
Run Code Online (Sandbox Code Playgroud)
请注意,第二种方法返回一个对象数组,控制器名称是复数形式(Persons not Person)。
因此,如果您想通过 id 获取资源,它将是:
api/persons/1
Run Code Online (Sandbox Code Playgroud)
如果您想通过一些搜索条件(如名字等)获取对象,您可以像这样进行搜索:
api/persons?firstName=Name&...
Run Code Online (Sandbox Code Playgroud)
继续前进,如果你想接受那个人的订单(例如),它应该是这样的:
api/persons/1/orders?skip=0&take=20
Run Code Online (Sandbox Code Playgroud)
和同一个控制器中的方法:
[HttpGet("{personId}/orders")]
public Orders[] Get(int personId, int skip, int take, etc..)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
169498 次 |
| 最近记录: |