如何使用参数数组做服务 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的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WCF Rest Service 中传递多个参数?

将 JSON 数组发布到 WCF Rest 服务会导致空参数。数据合同?

如何在 REST 模式下使用 WCF 服务?

如何使用 Android 使用 WCF Rest 服务

如何从基于 REST 的 WCF 服务中读取授权标头?

如何同时使用 SOAP WCF 服务和 REST API