【问题标题】:Can you send 1 web service the same parameter but different names?您可以发送 1 个具有相同参数但名称不同的 Web 服务吗?
【发布时间】:2013-08-21 14:36:19
【问题描述】:

我们正在创建一个 Web 服务来接收一个值(字符串)。根据字符串,我们判断是“type 1”还是“type 2”,以及在处理方面需要做什么。 所以我的网络服务设置为使用以下方式接收数据: http://www.mysite.com/service.asmx?op=ProcessData?DataID=string

发送字符串的客户端想要使用 2 个不同的请求发送它: http://www.mysite.com/service.asmx?op=ProcessData?DataIDType1=string http://www.mysite.com/service.asmx?op=ProcessData?DataIDType2=string

这是否可能让我知道他发送的是哪种类型?我不能为此设置不同的签名吗?因为它们都是同一个参数?

【问题讨论】:

  • 大概您知道如何检查已传递的参数 - 因此您可以同时查找名称和值,并编写适当的代码。到目前为止,您尝试了什么?
  • 您是否考虑过使用第二个参数来指示传递的类型?或者更好的是,如果它们实际上做两件单独的事情并期望两个单独的输入,则创建两个方法?

标签: c# web-services


【解决方案1】:

类似于写作:

public void DoSomething(String inputA)
{
    ...
}

public void DoSomething(String inputB)
{
    ...
}

它不起作用(并且有充分的理由!) - 方法签名是相同的。

想象一下电话:

MyClass.DoSomething("TEST");

它会调用哪个?它应该调用哪个

您的选择(如我所见):

public void DoThingA(String input)
{
    ...
}

public void DoThingB(String input)
{
    ...
}

这将为您提供不同的方法签名,并表示您正在执行两个不同的操作(随后更清晰,IMO)。

如果您坚持使用单个方法签名,您可以这样做:

public void DoSomething(String input, object operationType) //where object is whatever type you see fit...
{
    if(operationType == ...)
    {
        DoThingA(input);
    }
    else
    {
        DoThingB(input);
    } 
}

或者……

public void DoSomething(String input)
{
    switch(input)
    {
        case "A":
            ...
            break;
        case "B":
            ...
            break;
        default:
            ...
            break;
    }
}

最合适的取决于您的可用选项。但我会创建两种方法。

【讨论】:

  • 这正是我的想法,但他们的反应似乎如此肯定和肯定,我开始怀疑自己,因为我在 Web 服务方面达不到标准。谢谢!!
【解决方案2】:

一个方法应该有一个单一的职责,因此我推荐两种方法。

public void FirstMethod(string param)
{
// Do something.
}

public void SecondMethod(string param)
{
// Do something.
}

这代表了良好的设计,并且当客户想要添加更多功能时,后期可维护性的问题对您来说无疑会更容易!

【讨论】:

    猜你喜欢
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多