use*_*072 1 asp.net-core-webapi asp.net-core-2.0
我一直在使用 2.2 中的 Web api,并且使用对象的 post 方法或使用基元的 get 方法没有任何问题。我的问题是我想同时从路由中的值和查询字符串值的 get 方法绑定到模型对象。
所以基本上从下面的代码我想绑定到一个简单的对象。如果您想象该网址是:
http://localhost:9999/api/Values/ {名字}?{姓氏}=鲍勃
我尝试装饰模型对象并收到 415 个响应,这看起来很奇怪
using Microsoft.AspNetCore.Mvc;
namespace apitest.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values/5
[HttpGet("{Firstname}")]
public ActionResult<string> Get(Person person)
{
return "value";
}
}
}
namespace apitest
{
public class Person
{
public string Firstname { get; set; }
public string Surname { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
显然,这个示例是微不足道且无意义的,但基本上我只想将路由/查询字符串中的名字和姓氏映射到 Person 对象上的名字/姓氏属性。我必须编写自定义模型绑定程序吗?如果是这样,有什么好的例子吗?
小智 6
已经有一段时间了,但也许在 ASP.NET Core 3.1 中遇到同样问题的人会在这里结束,所以我会留下我的答案:)
使用 [FromQuery] 属性注释 person 参数,使用 [FromRoute] 属性注释 Firstname 属性就可以解决问题。
所以它应该看起来像这样:
namespace apitest.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ValuesController : ControllerBase
{
// GET api/values/5
[HttpGet("{Firstname}")]
public ActionResult<string> Get([FromQuery] Person person)
{
return "value";
}
}
}
namespace apitest
{
public class Person
{
[FromRoute]
public string Firstname { get; set; }
public string Surname { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3512 次 |
| 最近记录: |