使用具有多个参数的WCF Rest Service并允许可为空的参数

时间:2017-03-06 10:53:35

标签: c# web-services rest wcf

我正在编写一个Web服务,代码如下:

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

正如您在上面的代码中看到的,第二个参数可以填充或保持为null。通过这样做,我可以通过两个不同的URL访问该服务。

  1. http://localhost:44880/Service1.svc/BudgetBalance/nurul.widiyanti
  2. http://localhost:44880/Service1.svc/BudgetBalance/nurul.widiyanti/PRM-000114
  3. 如果第二个参数填充了某些数据,则服务将返回不同的值。问题是当我想要使用这个web服务时。这是我试图称之为服务的代码。

     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);
    

    这不起作用并发生错误。我意识到,如果我将UriTemplate中的OperationContract更改为以下内容,则此代码将有效:

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

    但是,如果我这样做,它不符合我的要求。我需要创建一个webservice,允许其中一个参数保持为空(null)。这有可能实现这个要求吗?如果是这样,请指导我找到答案。

1 个答案:

答案 0 :(得分:0)

我想你想要这样的东西......

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