我有一个我需要通过WebAPI公开的类。但是,该类有大约十个相同方法的重载,从四个参数到大约12个!我不能改变这个底层类,因为其他原因改变太重要了所以我试图尽可能巧妙地包装这个行为。
我不想在客户端(调用者)和与这些方法签名1:1匹配的服务器(webAPI)上编写10个方法,但是不能想到更优雅的方法来执行此操作。 为了更好地解释我的问题,我有一个班级:
Class A{
Public string something(int a, int b, int c, int d){}
Public string something(int a, int b, int c, int d, int e){}
Public string something(int a, int b, int c, int d, int e, int f){}
Through to…
Public string something(int a, int b, int c, int d, int e, int f, int g, int h, int I, int j, int k, int l){}
}
显然,它们不是全部,并且不是很干净,因为这个遗留类中有各种参数组合。
我不想在我的新客户端包装器中调用我的API编写GET方法,而在我的API本身内部使用GET方法来接收每个参数,但是不能想到更清洁或更优雅的方式来做到这一点。
理想情况下,我想将某种params对象/字典传递给调用者,然后将其传递给Web API,但不知道webapi是否会在HTTP GET中支持它?
欢迎任何建议或反馈如何最好地解决这个问题。
答案 0 :(得分:0)
这可能会有所帮助。
// Create an EmployeeDTO that will be used as the model,
//i.e. parameter of your controller action
public class EmployeeDTO
{
public int a { get; set; }
public int b { get; set; }
public int c { get; set; }
}
// Create a factory that does the actual work
// of calling one of your Employee constructor
public class EmployeeFactory
{
public Employee GetEmployee(EmployeeDTO eDTO)
{
//based on what values you recieve in the model i.e. EmployeeDTO,
//call the appropriate Employee Constructor
}
}
// Your legacy class
public class Employee
{
public Employee(int a) { }
public Employee(int a, int b) { }
public Employee(int a, int b, int c) {}
//.. and so on
}
您可以使用nuget包webapiproxy
,webapiproxy.csharp
为客户端提供代理js / class