C# HTTP Web Service 方法实现可选参数

想要使用C#的asmx的WebMethod来实现一个WebService,。

想要用户给服务器传递数据,finger_print_base64 是一个必须传递的固定参数,thresholdmini_matches是两个可选参数。

目前已知可以定义MessageName 来通过方法重载实现相同方法名的可选参数

[WebMethod(MessageName = "Default")]
public void SearchPerson(String finger_print_base64)
{

}

[WebMethod(MessageName = "AddThreshold")]
public void SearchPerson(String finger_print_base64,int threshold)
{

}

[WebMethod(MessageName = "AddMinMatches")]
public void SearchPerson(String finger_print_base64,int mini_matches)
{

}

但是,由于第二个方法和第三个方法的参数类型是相同的,无法实现重载。

想知道是否有其他方法来实现可选参数。

因为这是一个功能的接口,不想要改变方法名:SearchPerson,所以不想通用不同的方法名来进行区分。

提前谢过各位大佬。

阅读 5.7k
3 个回答

加参就是了。反正你可用可不用,加一个可选参数就是了

[WebMethod(MessageName = "AddThreshold")]
public void SearchPerson(String finger_print_base64,int threshold = 0,string param = "")
{

}

[WebMethod(MessageName = "AddMinMatches")]
public void SearchPerson(String finger_print_base64,int mini_matches = 0)
{

}

谢邀、讲真我看你问题看了半天才搞懂、(主要是我一看概念性的东西脑壳就大)

针对你的问题、我自己有两个解决方法:

1.何必纠结SearchPerson的名称、直接再一个就OK、你可以取名SearchPerson1什么的、只要你自己懂就行、如果别人也要用的话可以在方法前加上

/// <summary>
/// 你的方法名写在这里
/// </summary>

当你 . 方法的时候会有中文注解、方便别人也知道你写的什么

2.既然参数类型相同、我们需要考虑的就是怎样区分AddThresholdAddMinMatches这两种方法

方法很简单、楼楼只需再多加一个参数、在方法内做一个判断就行了、如

[WebMethod(MessageName = "你的名字")]
public void SearchPerson(String finger_print_base64,int mini_matches,int new_data)
{
     if(new_data==1)
     {
         //在这里写`AddThreshold`的方法
     }
     else if(new_data==2)
     {
         //在这写`AddMinMatches`的方法
     }
}

一切迎刃而解、有时候换个思维其实就能解开难题 |^_^|

谢邀。
个人认为其实没必要纠结这些细节,既然技术上没有比较好的办法那就从业务上去解决,二者取其一,互相权衡即可。
你这个问题从技术上是无解的,所以不要白费力气了,分为两个方法就是了。
有时候你认为合理的未必就是对的,程序在正确可靠的前提下,最简单可行的设计就是好设计,何必舍近求远。
有这个功夫为何不拿来多看看书呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进