如何使用C#中的可选参数构建Web服务/ web api

时间:2013-05-27 14:54:34

标签: c# asp.net web-services

我正在使用网络服务构建网络API。 用户可以像这样使用它: http://www.example.com/example.asmx/hello?param1=str&param2=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&param2=str

[WebMethod]
public string hello(int param1, int param2 = 0)
{
    return "hello!";
}

有什么办法可以解决吗?如果没有,我可以使用哪些技术来构建接受可选参数的Web API,这在公共API中非常常见。我是新手,所以我不知道Web服务是否是构建Web API的好选择。任何帮助表示赞赏。

3 个答案:

答案 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 SupportDefault Attribute Binding Support

  1. 值类型伴随公共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" />

  2. 通过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)