【问题标题】:How to build web service/web api with optional parameters in C#如何在 C# 中使用可选参数构建 Web 服务/Web api
【发布时间】:2013-05-27 14:54:33
【问题描述】:

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

或:

http://www.example.com/example.asmx/hello?param1=str.

我想让 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 的好选择。任何帮助表示赞赏。

【问题讨论】:

  • @l4V 谢谢!看来我需要学习一些关于 WCF 的知识。我会试一试,看看它是否有效。
  • 您可能需要考虑使用 ASP.NET Web API。我很确定它可以正确处理这种情况,而且它是专门为构建 Web API 而设计的。
  • @YoussefMoussaoui 我会用谷歌搜索一些关于 ASP.NET Web API 的东西,谢谢你的帮助。
  • @YoussefMoussaoui 感谢您的帮助!我已经尝试过 Web API,它就像一个魅力!这正是我正在寻找的。​​span>

标签: c# asp.net web-services


【解决方案1】:

基本上你不能那样做。

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

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

【讨论】:

  • 我认为他根本没有使用 Web API。
  • 关于 uri 的示例,是的,我同意。
【解决方案2】:

您是否考虑过使用在应用程序(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;
    }

【讨论】:

  • 好吧,这里的参数是名称/值对。说,1http://www.example.com/example.asmx/hello?userid=a1b2&amp;count=5。需要参数名称和参数值。我想你的方法不支持名称/值类型参数。
【解决方案3】:

问题可能是对于 web 方法,此参数是必需的。也许这会有所帮助。

按照MinOccurs Attribute Binding SupportDefault Attribute Binding Support

  1. 值类型带有一个公共 bool 字段,该字段使用前面在将 XSD 转换为源 - minOccurs 输出 &lt;element&gt; 元素 0 中描述的指定命名约定。

    [WebMethod]
    public SomeResult SomeMethod(bool optionalParam, [XmlIgnore] bool optionalParamSpecified)
    结果:
    &lt;s:element minOccurs="0" maxOccurs="1" name="optionalParam" type="s:boolean" /&gt;
  2. 具有通过 System.Component.DefaultValueAttribute 指定的默认值的值类型 - 输出 &lt;element&gt; 元素 0 的 minOccurs 值。在 &lt;element&gt; 元素中,默认值也通过默认 XML 属性指定。

    [WebMethod]
    public SomeResult SomeMethod([DefaultValue(true)] bool optionalParam)
    结果:
    &lt;s:element minOccurs="0" maxOccurs="1" default="true" name="optionalParam" type="s:boolean" /&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-07
    • 1970-01-01
    • 2010-11-02
    • 2018-04-10
    • 2016-11-09
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    相关资源
    最近更新 更多