能够如此定义路由:
@echo off
cd /d "C:\Program Files\ImageMagick-6.9.1-Q16"
mogrify -path img/images img/images/*.* -fuzz 10% -fill pink -opaque black img/images/*.*
非常适合调用这样的端点:
Route("Calculator/AddTwoNumbers/a/{a}/b/{a}")]
public IHttpActionResult AddTwoNumbers(double a, double b)
我很好奇在有效载荷/数据传输对象(DTO)变得更复杂(即分层)的情况下该怎么做。以上的例子,这可能是一个相应的DTO:
http://localhost:64466/Calculator/AddTwoNumbers/a/1/b/2
类似的东西:
public class PayLoad
{
public double a { get; set; }
public double b { get; set; }
}
不起作用,因为似乎没有'模型绑定' (?)和asp.net mvc一样。
如果DTO更复杂,我该怎么办?
答案 0 :(得分:1)
您需要使用payLoad
属性装饰[FromUri]
参数定义:
public IHttpActionResult AddTwoNumbers([FromUri] PayLoad payLoad)
请参阅MSDN
答案 1 :(得分:1)
我认为有两种方法可以解决使用WepApi获取数据的问题:
1-使用 [FromUri] :
要强制Web API从URI读取复杂类型,请将[FromUri]属性添加到参数中。以下示例定义了GeoPoint类型,以及从URI获取GeoPoint的控制器方法。
public class GeoPoint
{
public double Latitude { get; set; }
public double Longitude { get; set; }
}
public ValuesController : ApiController
{
public HttpResponseMessage Get([FromUri] GeoPoint location) { ... }
}
客户端可以将纬度和经度值放在查询字符串中,Web API将使用它们构建GeoPoint。例如:
http://localhost/api/values/?Latitude=47.678558&Longitude=-122.130989
2-使用 [FromBody] : 要强制Web API从请求正文中读取简单类型,请将[FromBody]属性添加到参数中:
public HttpResponseMessage Post([FromBody] string name) { ... }