我有一条有效的代码,其中包含一些路线,例如:
[Route("Companies/{id}", Name = "CompanyDetails")]
[HttpGet]
public HttpResponseMessage getCompanyDetails(string id)
{...}
[Route("Drivers/{driverIds}/Routes", Name = "Drivers")]
[HttpGet]
public HttpResponseMessage getDrivers([FromUri] List<int> driversId)
{...}
[Route("Vehicles/Signs", Name = "VehicleSigns")]
[HttpGet]
public HttpResponseMessage getVehicleSigns([FromUri]string companyId , [FromUri]List<string> vehicleIds)
{...}
从类似的问题中,我了解到它与参数的类型有关,当我必须放入 [FromUri] 以及时,我仍未进行深度配置不是。这与参数类型,参数数量或它们的组合有关吗?
答案 0 :(得分:1)
这与Web API如何绑定操作方法的参数有关。
如果您查看official docs:
如果参数是“简单”类型,则Web API尝试获取该值 来自URI。简单类型包括.NET基本类型(int, bool,double等),以及TimeSpan,DateTime,Guid,十进制, 和字符串,以及带有类型转换器的任何类型,可以从 一个字符串。 (稍后会更多有关类型转换器的信息。)
对于复杂类型,Web API尝试使用媒体类型从消息正文读取值 格式化程序。
因此,要从Uri参数绑定复杂类型:
public class GeoPoint
{
public double Latitude { get; set; }
public double Longitude { get; set; }
}
public ValuesController : ApiController
{
public HttpResponseMessage Get([FromUri] GeoPoint location) { ... }
}
然后在URI查询字符串中传递Latitude
和Longitude
:
http://localhost/api/values/?Latitude=47.678558&Longitude=-122.130989
如果您未指定[FromUri]
属性,则Web api默认会在请求正文中查找Longitude
和Latitude