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

本文关键字:web 构建 参数 服务 api | 更新日期: 2023-09-27 18:15:38

我正在使用web服务构建web API。用户可以这样使用它:http://www.example.com/example.asmx/hello?param1=str&param2=str

或:

CCD_ 2。

我想让param1是必需的,而param2是可选的。但是,当我尝试调用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的好选择。感谢您的帮助。

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

基本上你做不到。

我建议你先读这篇文章:http://blogs.msdn.com/b/jmstall/archive/2012/04/16/how-webapi-does-parameter-binding.aspx

它很好地解释了参数是如何绑定的。

您是否考虑过使用在应用程序(wpf/winforms(中工作的params。

    // 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;
    }

问题可能是web方法需要此参数。也许这会有所帮助。

根据MinOccurs属性绑定支持和默认属性绑定支持:

  1. 值类型,附带一个公共布尔字段,该字段使用前面在将XSD转换为输出<element>元素0的源-minOccurs值下描述的指定命名约定。

    [WebMethod]
    public SomeResult SomeMethod(bool optionalParam, [XmlIgnore] bool optionalParamSpecified)
    result:
    <s:element minOccurs="0" maxOccurs="1" name="optionalParam" type="s:boolean" />

  2. 具有通过系统指定的默认值的值类型。组成部分DefaultValueAttribute-minOccurs输出<element>元素0的值。在<element>元素中,默认值也是通过默认的XML属性指定的。

    [WebMethod]
    public SomeResult SomeMethod([DefaultValue(true)] bool optionalParam)
    result:
    <s:element minOccurs="0" maxOccurs="1" default="true" name="optionalParam" type="s:boolean" />