【问题标题】:How to pass optional parameters for web method?如何为 web 方法传递可选参数?
【发布时间】:2013-03-25 00:09:58
【问题描述】:

我有一个带有多个参数的 web 方法。 web方法只依赖2个字段,其余都是可选的。

   [OperationContract]
    public string WarehouseContactInformation(int WAID (Required), string CN (Required), string CT (Optional), string CC (Optional), string CFN (Optional), string CD (Optional), string CE (Optional),string CW (Optional))

如何将这些参数声明为可选,这样当我调用 Web 方法时,我只需传递我拥有值的字段,例如:

WarehouseContactInformation(1,'Bill','00012311')
WarehouseContactInformation(1,'Bill','00012311','12415415','123525')

【问题讨论】:

标签: c# asp.net wcf


【解决方案1】:

你不能。 Web 方法不支持可选参数。当您为 Web 方法生成代理时,您会获得特定的签名,您的客户端和服务器将根据该签名交换消息。但它不能传递可选参数。可以在服务器端使用默认参数,但没有可选参数。

【讨论】:

  • 你有我可以在服务器端使用的这些默认参数的示例吗?
  • 好吧,它就像你的类中的标准默认参数:公共字符串 WarehouseContactInformation(int WAID, string CN, string CT = "defaultValue")。在此之后,您的代理方法将生成为 WarehouseContactInformation(int WAID, string CN) 并且每次您调用它时 - 它都会在您的服务上调用 WarehouseContactInformation(int WAID, string CN, string CT = "defaultValue")。
  • 谢谢。先生,您是绅士和学者!
  • @voo 先生,请检查我在下面发布的答案,如果我这样做,我做错了吗。指导我。谢谢
【解决方案2】:

我所做的是:发送与XML绑定的参数,并且不绑定可选参数的值将其留空。

        XmlDocument xmlDoc = new XmlDocument();
        xmlDoc.LoadXml(
            "<registration>" +
            "<field1>" + value + "</field1>" +
            "<field2>" + value(or leave blank) + "</field2>" +
            "<field3>" + value + "</field3>" +
            "<field4>" + value + "</field4>" +
            "</registration>");

        int status = objectOfService.methodName(xmlDoc);

在网络服务中你可以这样做

    public int UpdateUser(XmlNode node)
    {
       String filed1Value=node["field1"].InnerText;
    }

希望对你有帮助。

【讨论】:

  • 是的,您可以在 XML、JSon 甚至对象中传递参数,这是在这种情况下避免可选参数的一种方法。但从语义上讲,使用方法传递部分数据以使代码更明显更正确。例如,当我看到您的代码的第二部分时,我不明白 XmlNode 是什么。但是,如果我将其更改为 UpdateUser(string login, string pass, string role) - 它变得有点清晰并避免了 Xml 解析和反解析
猜你喜欢
  • 2020-04-07
  • 2012-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-16
  • 1970-01-01
相关资源
最近更新 更多