我正在使用网络服务构建网络API。
用户可以像这样使用它:
http://www.example.com/example.asmx/hello?param1=str¶m2=str
或:
http://www.example.com/example.asmx/hello?param1=str
。
我想在param2可选时使param1成为必需。但是我的代码总是抛出一个异常,当我尝试调用http://www.example.com/example.asmx/hello?param1=str
时,该异常会显示参数的缺失值。它适用于http://www.example.com/example.asmx/hello?param1=str¶m2=str
。
[WebMethod]
public string hello(int param1, int param2 = 0)
{
return "hello!";
}
有什么办法可以解决吗?如果没有,我可以使用哪些技术来构建接受可选参数的Web API,这在公共API中非常常见。我是新手,所以我不知道Web服务是否是构建Web API的好选择。任何帮助表示赞赏。
答案 0 :(得分:3)
基本上你不能这样做。
我建议你先阅读这篇文章: http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx
它很好地解释了参数的绑定方式。
答案 1 :(得分:0)
您是否考虑过在应用程序中使用params(wpf / winforms)。
// not tested
[WebMethod]
public string hello(params int[] list)
{
string s = "Hello\n";
// do some stuff with your ints
for ( int i = 0 ; i < list.Length ; i++ )
s += list[i] + "\n" ;
return s;
}
答案 2 :(得分:0)
问题可能是对于web方法,此参数是必需的。也许这会有所帮助。
根据MinOccurs Attribute Binding Support和Default Attribute Binding Support:
值类型伴随公共bool字段,该字段使用前面在将XSD转换为源 - 源输出<element>
元素0的minOccurs值时所述的指定命名约定。
[WebMethod]
public SomeResult SomeMethod(bool optionalParam, [XmlIgnore] bool optionalParamSpecified)
结果:
<s:element minOccurs="0" maxOccurs="1" name="optionalParam" type="s:boolean" />
通过System.Component.DefaultValueAttribute指定的默认值的值类型 - 输出<s:element minOccurs="0" maxOccurs="1" name="optionalParam" type="s:boolean" />
元素0的minOccurs值。在<element>
元素中,默认值也通过默认的XML属性。
<element>
结果:
[WebMethod]
public SomeResult SomeMethod([DefaultValue(true)] bool optionalParam)