何时使用FromUri,何时不在ASP.NET Web API中

时间:2018-10-05 08:27:49

标签: asp.net rest web-services

我有一条有效的代码,其中包含一些路线,例如:

[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] 以及时,我仍未进行深度配置不是。这与参数类型,参数数量或它们的组合有关吗?

1 个答案:

答案 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查询字符串中传递LatitudeLongitude

http://localhost/api/values/?Latitude=47.678558&Longitude=-122.130989

如果您未指定[FromUri]属性,则Web api默认会在请求正文中查找LongitudeLatitude