我想將一些參數作爲數組傳遞給Web方法。 Web方法的簽名沒有params關鍵字。將參數數組傳遞給Web方法
我具有可變數量的參數(作爲web方法接受),所以我不能把該陣列分成n個單變量。
這怎麼辦?
我想將一些參數作爲數組傳遞給Web方法。 Web方法的簽名沒有params關鍵字。將參數數組傳遞給Web方法
我具有可變數量的參數(作爲web方法接受),所以我不能把該陣列分成n個單變量。
這怎麼辦?
params
只是語法糖,爲什麼不只是做這樣的事情:
var myWebService = new MyWebService();
myWebService.MyMethod(new string[] { "one", "two", "three" });
在Web服務端的方法簽名也只是:
public void MyMethod(string[] values);
如果您發佈你的網絡方法或許可以提供更好的答案。
編輯
如果您不能修改Web方法簽名,然後我會用一個extension method包住難以調用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
statment的命名空間,你宣佈你的擴展方法):
var svc = new MyWebService();
svc.MyMethod("this", "is", "a", "test");
你爲什麼不use..an陣列?
[WebMethod]
public string Foo(string[] values)
{
return string.Join(",", values);
}
我不能修改的WebMethod。它的簽名是'webmethod(字符串a1,字符串a2,...,字符串a10)' – CiccioMiami 2011-05-09 08:42:40
它不是我的風格downvote,我總是欣賞答案,並且爲此我總是投票。我不認爲這是我低調,但現在我甚至不能投票給你。我想這是與新版本的Mozilla相關的一些問題。只要它正常工作,我會投你一票。 – CiccioMiami 2011-05-09 15:18:26
@Francesco:沒有煩惱,沒有必要給予好評,因爲我的回答並沒有真正幫助您解決,感謝 – BrokenGlass 2011-05-09 15:24:00
忽視的事實這是一個網絡方法片刻。最終,這是一種方法。和所有的方法一樣,要麼被定義爲需要參數。如果沒有定義參數,那麼你不能傳遞參數給你,你能嗎?除非你有權訪問源代碼,並有機會定義它。
如果它被定義爲需要參數,那麼問題是,它是否被定義爲使用數組參數?如果沒有,那麼你就不能向它傳遞參數(除非你可以改變它,這樣就可以了。)
謝謝您的回答,它接受的參數。它的簽名是'webmethod(string a1,string a2,...,string a10)'。我想知道我是否可以傳遞一個數組(在這種情況下是10個元素)instag傳遞每個元素 – CiccioMiami 2011-05-09 08:44:52
不,這不行,如果可能的話,這將是很好的,但:) – 2011-05-10 15:49:02
感謝您的答覆,我無法修改Web方法和方法簽名的WebMethod(字符串A1,A2串.. ,串A10) – CiccioMiami 2011-05-09 08:40:27
@Francesco明白了,請參閱更新我的答案。希望有所幫助。 – rsbarro 2011-05-09 11:48:48