我想处理以下API调用的POST:
/v1/location/deviceid/appid
附加参数来自后机构。
这一切对我来说都很好。现在,我通过允许将“ deviceid”和/或“ appid”和/或BodyData设置为null来扩展代码:
/v1/location/deviceid
/v1/location/appid
/v1/location/
这3个URL应该以相同的路径响应。
我的第一种方法(需要BodyData):
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody] location_fromuser BodyData)
{
return repository.AddNewLocation(deviceid, appid, BodyData);
}
这不起作用,并返回编译错误:
“可选参数必须在末尾”
下次尝试:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post([FromBody] location_fromuser BodyData, string deviceid = null, string appid = null)
现在BodyData=null
,即使调用发送了Body,我的函数AddNewLocation()也总是得到-。
最后,我将所有3个参数设置为可选:
[Route("v1/location/{deviceid}/{appid}", Name = "AddNewLocation")]
public location_fromuser Post(string deviceid = null, string appid = null, [FromBody location_fromuser BodyData = null)
不工作:
BodyData
不支持可选参数FormatterParameterBinding
。
为什么要使用可选参数的解决方案?我的控制器仅通过POST处理“添加新位置”。
我想发送错误的数据我自己的异常或错误消息。即使呼叫的值缺失。在这种情况下,我希望能够决定通过我的代码引发异常或设置默认值。
?
我一直在寻找路由模板中的内容。+1