Hau*_*uke 15 .net c# asp.net web-services optional-parameters
我想用这个签名构建一个web服务,如果param2留空,它不会抛出异常.这可能吗?
[WebMethod]
public string HelloWorld(string param1, bool param2) { }
Run Code Online (Sandbox Code Playgroud)
异常是在尝试将空字符串转换为布尔值时抛出的System.ArgumentException.
到目前为止没有奏效的想法:
Web服务不允许使用方法重载,例如
public string HelloWorld(string param1)
{
return HelloWorld(param1, false);
}
Run Code Online (Sandbox Code Playgroud)如建议在这里:
bool可空的bool?.同样的例外.我的问题与这个问题有关,但唯一的答案是WCF合同,我还没有使用过.
Ras*_*ain 13
您可以在具有MessageName属性的webservices中使用重载方法.这是实现重载功能的解决方法.
请看http://msdn.microsoft.com/en-us/library/byxd99hx%28VS.71%29.aspx
[WebMethod(MessageName="Add3")]
public double Add(double dValueOne, double dValueTwo, double dValueThree)
{
return dValueOne + dValueTwo + dValueThree;
}
[WebMethod(MessageName="Add2")]
public int Add(double dValueOne, double dValueTwo)
{
return dValueOne + dValueTwo;
}
Run Code Online (Sandbox Code Playgroud)
该方法将在可见的Add2和Add3到外面.
Die*_*ego 12
如果你真的必须完成这个,那么对于只有基本类型作为参数的web方法的特定情况,这是一种破解:
[WebMethod]
public void MyMethod(double requiredParam1, int requiredParam2)
{
// Grab an optional param from the request.
string optionalParam1 = this.Context.Request["optionalParam1"];
// Grab another optional param from the request, this time a double.
double optionalParam2;
double.TryParse(this.Context.Request["optionalParam2"], out optionalParam2);
...
}
Run Code Online (Sandbox Code Playgroud)
我知道这篇文章有点旧.但我认为方法名称对于Rasik的示例应该是相同的.如果两个方法名称相同,那么重载就在那里.我想它应该是这样的..
[WebMethod(MessageName="Add3")]
**public double Add(double dValueOne, double dValueTwo, double dValueThree)**
{
return dValueOne + dValueTwo + dValueThree;
}
[WebMethod(MessageName="Add2")]
**public int Add(double dValueOne, double dValueTwo)**
{
return dValueOne + dValueTwo;
}
Run Code Online (Sandbox Code Playgroud)