2017-03-06 102 views
0

我正在寫一個Web服務,如下代碼:使用WCF REST服務,有多個參數,並允許爲空的參數

[OperationContract] 
    [WebInvoke(Method = "GET", 
    ResponseFormat = WebMessageFormat.Json, 
    RequestFormat = WebMessageFormat.Json, 
    // BodyStyle = WebMessageBodyStyle.Wrapped, 
    UriTemplate = "/BudgetBalance/{userlogin}/{prnumber=null}")] 
    Budget BudgetBalance(string userlogin, string prnumber); 

正如你可以在上面的代碼中看到,第二個參數可以填充或依然古色古香空。通過這樣做,我可以通過兩個不同的網址訪問該服務。

  1. http://localhost:44880/Service1.svc/BudgetBalance/nurul.widiyanti
  2. http://localhost:44880/Service1.svc/BudgetBalance/nurul.widiyanti/PRM-000114

如果第二個參數填充有一些數據,該服務將返回不同的值。問題是當我想要使用這個webservice時。以下是我試圖調用此服務的代碼。

WebClient proxy = new WebClient(); 
string serviceUrl = string.Format("http://localhost:1089/Service1.svc/BudgetBalance/Nurul.Widiyanti/PRM-000114"); 
byte[] data = proxy.DownloadData(serviceUrl); 
Stream _mem = new MemoryStream(data); 
var reader = new StreamReader(_mem); 
var result = reader.ReadToEnd(); 
var model = JsonConvert.DeserializeObject<Budget>(result); 

這不起作用,並出現錯誤。我意識到,如果我改變UriTemplateOperationContract到像這樣的代碼將工作:

UriTemplate = "/BudgetBalance/{userlogin}/{prnumber}"

但如果我這樣做,它不適合我的要求。我需要創建一個允許其中一個參數保持爲空的web服務(空)。這可能實現這個要求嗎?如果是這樣,請指導我找到答案。

回答

0

我想你想這樣的事情...

... 
UriTemplate = "/BudgetBalance/{userlogin}")] 
UriTemplate = "/BudgetBalance/{userlogin}/{prnumber}")] 
Budget BudgetBalance(string userlogin, string prnumber = null) { .. } 
+0

嗨@war,你的代碼並沒有解決這個問題。通過使用你的代碼。如果我沒有填寫第二個參數。未找到服務返回終結點。 –

+0

您可能需要第二個UrlTemplate映射(我的答案是一秒鐘) – War