将参数数组传递给 Web 方法
本文关键字:Web 方法 参数 数组 | 更新日期: 2023-09-27 17:55:23
我想将一些参数作为数组传递给Web方法。Web 方法的签名没有 params 关键字。
我有一个可变数量的参数(正如 web 方法接受的那样),所以我无法将数组放入 n 个单个变量中。
如何做到这一点?
params
只是句法糖,为什么不做这样的事情:
var myWebService = new MyWebService();
myWebService.MyMethod(new string[] { "one", "two", "three" });
Web 服务端的方法签名只是:
public void MyMethod(string[] values);
如果您发布您的网络方法,也许我可以提供更好的答案。
编辑
如果您无法修改 Web 方法签名,那么我将使用扩展方法来包装难以调用的 Web 服务。例如,如果我们的 Web 服务代理类如下所示:
public class MyWebService
{
public bool MyMethod(string a1, string a2, string a3, string a4, string a5,
string a6, string a7, string a8, string a9, string a10)
{
//Do something
return false;
}
}
然后,您可以创建一个扩展方法,该方法接受字符串数组作为params
并调用MyWebService
。
public static class MyExtensionMethods
{
public static bool MyMethod(this MyWebService svc, params string[] a)
{
//The code below assumes you can pass in null if the parameter
//is not specified. If you have to pass in string.Empty or something
//similar then initialize all elements in the p array before doing
//the CopyTo
if(a.Length > 10)
throw new ArgumentException("Cannot pass more than 10 parameters.");
var p = new string[10];
a.CopyTo(p, 0);
return svc.MyMethod(p[0], p[1], p[2], p[3], p[4], p[5],
p[6], p[7], p[8], p[9]);
}
}
然后,可以使用创建的扩展方法调用 Web 服务(只需确保为声明扩展方法的命名空间添加 using
语句):
var svc = new MyWebService();
svc.MyMethod("this", "is", "a", "test");
你为什么不使用..一个数组?
[WebMethod]
public string Foo(string[] values)
{
return string.Join(",", values);
}
暂时
忽略它是一个Web方法的事实。归根结底,它是一种方法。像所有方法一样,要么被定义为接受参数,要么不接受参数。如果没有定义它接受参数,那么你不能将参数传递给它,对吗?除非您可以访问源代码并且能够偶然确定它的定义,否则不会。
如果它被定义为接受参数,那么问题是,它是否被定义为接受数组参数?如果不是,则无法向其传递参数(除非可以更改它以便它可以。