WCF和可选参数

时间:2011-04-25 17:54:36

标签: .net wcf rest optional-parameters

我刚开始使用WCF和REST以及UriTemplates。现在可以使用可选参数吗?

如果没有,你们会建议我做一个系统,它有三个常用于网址的参数,还有一些是可选的(不同数量)?

示例:

https://example.com/?id=ID&type=GameID&language=LanguageCode&mode=free 
  • id,类型,语言始终存在
  • 模式是可选的

3 个答案:

答案 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 ?? "";
    }
}

对我来说,看起来所有查询字符串参数都是可选的。如果查询字符串中不存在参数,则其类型=>将具有默认值nullstringint为0,等等MS also states应该实施。

无论如何,您始终可以使用UriTemplateidtype定义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);