我可以从 HttpGet 中的 Route 属性获取简单类型参数,从 uri 获取复杂类型参数吗?
Can I get simple type parameter from Route attribute and complex type from uri in HttpGet?
我将尝试在下面的示例中解释我的问题
如果我们有 url 比如这个:
localhost/api/person/5?FirstName=Adam&LastName=Smith&City=London
并尝试获取参数
[HttpGet]
[Route("person/{someId}")]
public ActionResult Location(string someId, PersonRequest request)
是否可以尝试将“someId”之类的东西绑定到“/5”以及“?”之后的所有内容?绑定到 PersonRequest?
public class PersonRequest
{
public string? FirstName { get; set; }
public string? LastName { get; set; }
public string? City { get; set; }
}
我一直在尝试将它与 [FromUri] 等匹配,但我不知道如何做到这一点。仅当我在 Location 方法中列出所有参数时它才有效。
您可以使用 FromQuery
内联属性,如下所示:
[HttpGet]
[Route("person/{someId}")]
public ActionResult Location(string someId,[FromQuery] PersonRequest request)
{
// TODO
}
顺便说一句,我认为一个好的做法是只绑定查询字符串中的搜索词、过滤器等。如果您的 use-case 是发布一个 rest API 那么从 body 绑定是正确的方法。
考虑检查 Parameter Binding in ASP.NET Web API,因为它可以帮助您更深入地了解绑定。
我将尝试在下面的示例中解释我的问题
如果我们有 url 比如这个:
localhost/api/person/5?FirstName=Adam&LastName=Smith&City=London
并尝试获取参数
[HttpGet]
[Route("person/{someId}")]
public ActionResult Location(string someId, PersonRequest request)
是否可以尝试将“someId”之类的东西绑定到“/5”以及“?”之后的所有内容?绑定到 PersonRequest?
public class PersonRequest
{
public string? FirstName { get; set; }
public string? LastName { get; set; }
public string? City { get; set; }
}
我一直在尝试将它与 [FromUri] 等匹配,但我不知道如何做到这一点。仅当我在 Location 方法中列出所有参数时它才有效。
您可以使用 FromQuery
内联属性,如下所示:
[HttpGet]
[Route("person/{someId}")]
public ActionResult Location(string someId,[FromQuery] PersonRequest request)
{
// TODO
}
顺便说一句,我认为一个好的做法是只绑定查询字符串中的搜索词、过滤器等。如果您的 use-case 是发布一个 rest API 那么从 body 绑定是正确的方法。
考虑检查 Parameter Binding in ASP.NET Web API,因为它可以帮助您更深入地了解绑定。