我刚开始使用WCF和REST以及UriTemplates。现在可以使用可选参数吗?
如果没有,你们会建议我做一个系统,它有三个常用于网址的参数,还有一些是可选的(不同数量)?
示例:
https://example.com/?id=ID&type=GameID&language=LanguageCode&mode=free
答案 0 :(得分:31)
我刚刚使用WCF 4进行了测试,它没有任何问题。如果我在查询字符串中不使用模式,我将获得null作为参数的值:
[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet(UriTemplate = "GetData?data={value}&mode={mode}")]
string GetData(string value, string mode);
}
方法实施:
public class Service : IService
{
public string GetData(string value, string mode)
{
return "Hello World " + value + " " + mode ?? "";
}
}
对我来说,看起来所有查询字符串参数都是可选的。如果查询字符串中不存在参数,则其类型=>将具有默认值null
为string
,int
为0,等等MS also states应该实施。
无论如何,您始终可以使用UriTemplate
,id
和type
定义language
,并通过WebOperationContext
访问方法中的可选参数:
var mode = WebOperationContext.Current.IncomingRequest.UriTemplateMatch.QueryParameters["mode"];
答案 1 :(得分:2)
我在restful web服务中尝试过可选参数, 如果我们不在参数值中传递任何内容,则它保持为null。之后我们可以检查 函数中为null或为空。如果它为null,则不要使用它,否则您可以使用它。 假设我有以下代码
[ServiceContract]
public interface IService
{
[OperationContract]
[WebGet(UriTemplate = "GetSample?part1={part1}&part2={part2}")]
string GetSample(string part1, string part2);
}
这里第1部分是必修课,第2部分是可选的。 现在该功能看起来像
public class Service : IService
{
public string GetSample(string part1, string part2)
{
if (!string.IsNullOrEmpty(part2))
{
return "Hello friends..." + part1 + "-" + part2;
}
return "Hello friends..." + part1;
}
}
您也可以根据自己的要求进行转换。
答案 2 :(得分:-1)
你必须使用“?”在你的网址中跟着“/”。
示例:
[WebGet(UriTemplate = "GetSample/?OptionalParamter={value}")]
string GetSample(string part1);