我正在编写一个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访问该服务。
如果第二个参数填充了某些数据,则服务将返回不同的值。问题是当我想要使用这个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)。这有可能实现这个要求吗?如果是这样,请指导我找到答案。
答案 0 :(得分:0)
我想你想要这样的东西......
...
UriTemplate = "/BudgetBalance/{userlogin}")]
UriTemplate = "/BudgetBalance/{userlogin}/{prnumber}")]
Budget BudgetBalance(string userlogin, string prnumber = null) { .. }