我使用rest api构建Web角色。它的所有参数都应该是可选的,默认值为
我试过了:
[WebGet(UriTemplate = "RetrieveInformation/param1/{param1}/param2/{param2}/param3/{param3}")]
public string RetrieveInformation(string param1, string param2, string param3)
{
}
我希望它适用于以下场景:
https://127.0.0.1/RetrieveInformation/param1/2
https://127.0.0.1/RetrieveInformation/param1/2/param3/3
我该怎么做?下面的工作会怎样?
[WebGet(UriTemplate = "RetrieveInformation/param1/{param1=1}/param2/{param2=2}/param3/{param3=3}")]
答案 0 :(得分:3)
我不认为你在使用片段时可以实现这一点(即使用/)。您可以使用通配符,但它只允许您对最后一个段执行此操作。
[WebGet(UriTemplate = "RetrieveInformation/param1/{param1}/{*param2}")]
如果您确实不需要分段并且可以使用查询参数,则以下路由将起作用
[WebGet(UriTemplate = "RetrieveInformation?param1={param1}¶m2={param2}¶m3={param3}")]
这样的路线将为您提供灵活性,因为参数不需要订购,也不需要。这将适用于以下
http://localhost:62386/Service1.svc/GetData?param1=1¶m2=2¶m3=3
http://localhost:62386/Service1.svc/GetData?param1=1¶m3=3¶m2=2
http://localhost:62386/Service1.svc/GetData?param1=1¶m2=2
http://localhost:62386/Service1.svc/GetData?param1=1¶m3=3
您可以找到有关UriTemplate @ http://msdn.microsoft.com/en-us/library/bb675245.aspx
的更多信息希望这有帮助
答案 1 :(得分:1)
当定义param2时,param1可能不是可选的,因此在单个路由中执行此操作可能有点麻烦(如果可能的话)。将GET分成多个路径可能会更好。
以下代码之类的东西可能对你有用......
[WebGet(UriTemplate = "RetrieveInformation")]
public string Get1()
{
return RetrieveInfo(1,2,3);
}
[WebGet(UriTemplate = "RetrieveInformation/param1/{param1}")]
public string GetP1(int param1)
{
return RetrieveInfo(param1,2,3);
}
[WebGet(UriTemplate = "RetrieveInformation/param1/{param1}/param2/{param2}")]
public string GetP1P2(int param1, int param2)
{
return RetrieveInfo(param1,param2,3);
}
[WebGet(UriTemplate = "RetrieveInformation/param1/{param1}/param3/{param3}")]
public string GetP1P3(int param1, int param3)
{
return RetrieveInfo(param1,2,param3);
}
private string RetrieveInfo(int p1, int p2, int p3)
{
...
}