关于网友提出的“ C# HTTP Web Service 方法实现可选参数”问题疑问,本网通过在网上对“ C# HTTP Web Service 方法实现可选参数”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: C# HTTP Web Service 方法实现可选参数
描述:想要使用C#的asmx的WebMethod来实现一个WebService,。
想要用户给服务器传递数据,finger_print_base64
是一个必须传递的固定参数,threshold
和 mini_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
,所以不想通用不同的方法名来进行区分。
提前谢过各位大佬。
解决方案1:谢邀。
个人认为其实没必要纠结这些细节,既然技术上没有比较好的办法那就从业务上去解决,二者取其一,互相权衡即可。
你这个问题从技术上是无解的,所以不要白费力气了,分为两个方法就是了。
有时候你认为合理的未必就是对的,程序在正确可靠的前提下,最简单可行的设计就是好设计,何必舍近求远。
有这个功夫为何不拿来多看看书呢?
解决方案2:谢邀、讲真我看你问题看了半天才搞懂、(主要是我一看概念性的东西脑壳就大)
针对你的问题、我自己有两个解决方法:
1.何必纠结SearchPerson
的名称、直接再一个就OK、你可以取名SearchPerson1
什么的、只要你自己懂就行、如果别人也要用的话可以在方法前加上
///
/// 你的方法名写在这里
///
当你 . 方法的时候会有中文注解、方便别人也知道你写的什么
2.既然参数类型相同、我们需要考虑的就是怎样区分AddThreshold
和AddMinMatches
这两种方法
方法很简单、楼楼只需再多加一个参数、在方法内做一个判断就行了、如
[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`的方法
}
}
一切迎刃而解、有时候换个思维其实就能解开难题 |^_^|
解决方案3:加参就是了。反正你可用可不用,加一个可选参数就是了
[WebMethod(MessageName = "AddThreshold")]
public void SearchPerson(String finger_print_base64,int threshold = 0,string param = "")
{
}