gpt4 book ai didi

c# - 使用 WCF 的 REST 服务 - 可选的查询字符串参数?

转载 作者:太空狗 更新时间:2023-10-29 20:40:15 25 4
gpt4 key购买 nike

我在尝试使用 WCF 使用简单服务时遇到问题。到目前为止一切都进展顺利,除了在实现可选查询字符串参数时。界面看起来有点像这样:

[ServiceContract]
[XmlSerializerFormat]
public interface IApi
{
[OperationContract]
[WebGet(UriTemplate = "/url/{param}?top={top}&first={first}")]
object GetStuff(string param, int top, DateTime first);
}

然后通过创建继承 ClientBase<IApi> 的类来使用它.我尝试了几种使参数可选的方法:

1) 使参数可以为空

这没有用。我从 QueryStringConverter 收到消息就像另一个问题问的那样:Can a WCF service contract have a nullable input parameter?

2) URL末尾的一个参数

因此,我考虑将 UriTemplate 更改为更通用,构建查询字符串并将其作为参数传递。这似乎也不起作用,因为传入的值经过编码,因此服务器无法将其识别为查询字符串。

例子:

[WebGet(UriTemplate = "/url/{query}")]

3) 骇人听闻的解决方案

到目前为止,我发现唯一的方法是将所有参数更改为字符串,这里似乎允许 NULL。

例子:

[WebGet(UriTemplate = "/url/{param}?top={top}&first={first}")]
object GetStuff(string param, string top, string first);

这个接口(interface)的消费仍然接受正确的变量类型,但是ToString用来。这些查询字符串参数仍然出现在实际请求中。

那么,在使用 WCF 来消费 REST 服务时,是否有办法使查询字符串参数可选?

更新 - 它是如何修复的

创建服务行为的建议被采纳了。这继承自 WebHttpBehaviour .它看起来如下:

public class Api : ClientBase<IApi>
{
public Api() : base("Binding")
{
Endpoint.Behaviors.Add(new NullableWebHttpBehavior());
}
}

NullableWebHttpBehavior可以在以下 Stackoverflow 问题中找到:Can a WCF service contract have a nullable input parameter? .唯一的问题是,ConvertValueToString没有重载,所以我快速地抽了一个:

    public override string ConvertValueToString(object parameter, Type parameterType)
{
var underlyingType = Nullable.GetUnderlyingType(parameterType);

// Handle nullable types
if (underlyingType != null)
{
var asString = parameter.ToString();

if (string.IsNullOrEmpty(asString))
{
return null;
}

return base.ConvertValueToString(parameter, underlyingType);
}

return base.ConvertValueToString(parameter, parameterType);
}

这可能并不完美,但它似乎按预期工作。

最佳答案

您的选项 1) 可以用于 WCF 客户端,因为 WebHttpBehavior 可以应用于 ClientBase(或 ChannelFactory)派生类,如此 SO question & answer. 所示只需将您在 1) 中引用的代码与捕获 500 个响应问题中显示的配置结合起来,它就会显示效果。

关于c# - 使用 WCF 的 REST 服务 - 可选的查询字符串参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10540216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com