如何使用参数数组做服务 WCF REST
Posted
技术标签:
【中文标题】如何使用参数数组做服务 WCF REST【英文标题】:How to do service WCF REST with a parameter Array 【发布时间】:2020-01-24 08:37:22 【问题描述】:这是我的课:
[DataContract]
public class UserIdParams
[DataMember]
public int UserId get; set;
[DataMember]
public List<int> ListUserId get; set;
它包含一个整数列表和一个整数。
我的目标是创建服务 WCF REST : GetUserByID 以根据 id 获取用户列表
[OperationContract]
[WebGet]
List<User> GetUserByID (UserIdParams userIdParams);
但正如我们所知,我们不能在 wcf rest 中将 Array 或复杂类型作为输入参数传递,
(当我这样测试它时,我有这个错误:
另一方面,它适用于 WCF SOAP。
那么知道如何解决我的问题以让所有用户使用 WCF REST 并且参数是一个数组吗? 谢谢,
【问题讨论】:
相关(如果不是重复):***.com/questions/5241661/… 谢谢,是的,它是相关的,但不是重复的,首先我使用的是 Microsoft.Net 4.6 和 Visual Studio 2017,输入参数也是一个数组 Complexe 类型按照惯例通过 Post/Put 发送。这个问题是重复的,因为这两种方法都是 get。两者都只有一个参数是复杂类型。答案是相同的,要么序列化并将其作为字符串传递。或者去 Post and Put。或者更改 webconfig endpointBehavior 以便它自己进行序列化。 Passing-a-class-as-parameter-in-restful-wcf-service你可以找到解决办法。 我建议您在使用 post 方法时重构您的方法。如上所述,get方法默认不能序列化参数,所以我们必须手动添加序列化和反序列化方法来解析数据。 blogs.msdn.microsoft.com/carlosfigueira/2011/08/08/… 【参考方案1】:非常感谢 dnxit,他通过始终与 GET 合作为我提供了解决方案, * 我的老班:
public class UserIdParams : CommonParams
[DataMember]
public int UserId get; set;
[DataMember]
public List<int> ListUserId get; set;
和旧服务:
[OperationContract]
[WebInvoke(Method = "Get", UriTemplate = "GetUserByID")]
List<User> GetUserByID(UserIdParams userIdParams);
现在修复此错误并使用参数数组执行 WCF REST:
修改后的类:
public class UserIdParams : CommonParams
[DataMember]
public int UserId get; set;
[DataMember]
public string DelimitedUserIds get; set;
修改后的服务:
[OperationContract]
[WebGet(UriTemplate = "GetUserByID?DelimitedUserIds=DelimitedUserIds")]
List<User> GetUserByID(string DelimitedUserIds);
最重要的是添加:(示例)
string DelimitedUserIds = "9,3,12,43,2"
List<int> UserIds = DelimitedUserIds .Split(',').Select(int.Parse).ToList();
【讨论】:
以上是关于如何使用参数数组做服务 WCF REST的主要内容,如果未能解决你的问题,请参考以下文章