【问题标题】:How to do service WCF REST with a parameter Array如何使用参数数组做服务 WCF REST
【发布时间】: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 并且参数是一个数组吗? 谢谢,

【问题讨论】:

  • 相关(如果不是重复):stackoverflow.com/questions/5241661/…
  • 谢谢,是的,它是相关的,但不是重复的,首先我使用的是 Microsoft.Net 4.6 和 Visual Studio 2017,输入参数也是一个数组
  • Complexe 类型按照惯例通过 Post/Put 发送。这个问题是重复的,因为这两种方法都是 get。两者都只有一个参数是复杂类型。答案是相同的,要么序列化并将其作为字符串传递。或者去 Post and Put。或者更改 webconfig endpointBehavior 以便它自己进行序列化。
  • 我建议您在使用 post 方法时重构您的方法。如上所述,get方法默认不能序列化参数,所以我们必须手动添加序列化和反序列化方法来解析数据。 blogs.msdn.microsoft.com/carlosfigueira/2011/08/08/…

标签: c# rest wcf


【解决方案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();

【讨论】:

    猜你喜欢
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-07
    • 2012-12-31
    • 1970-01-01
    相关资源
    最近更新 更多