对象的方法重载

时间:2018-07-23 07:55:30

标签: c# asp.net-web-api asp.net-web-api2 asp.net-web-api-routing

我试图在C#WebApi中使用方法重载

[HttpPost] 
public HttpResponseMessage UpdateUser(PersonalInfoModel personalInfo){}

[HttpPost] 
public HttpResponseMessage UpdateUser(RolesModel roles){}

我致电客户:     / UpdateUser(json) 假设我们要更新用户的个人信息,因此json如下所示:

{firstName: "testUser", lastName: "testUser", age: 20}

,它应该与如下所示的PersonalInfoModel相匹配:

public class PersonalInfoModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}

我的想法是更新用户信息的不同部分并保持 很清楚,意思是用不同的对象调用相同的方法,我想 服务器上的UpdateUser将知道要使用什么功能,并且失败 因为服务器不知道要使用哪种路由。

我接下来要做的是仅在服务器中调用如下一条路由:

[HttpPost] 
public HttpResponseMessage UpdateUser(dynamic obj){
    return Update(obj);
}

public Update(PersonalInfoModel personalInfo){}

public Update(RolesModel roles){}

以上内容也不适用于错误: “最佳的重载方法匹配具有一些无效的参数” 我试图查看Google,但未能克服这一问题。

2 个答案:

答案 0 :(得分:0)

尝试一下

[HttpPost]
[Route("/api/[controller]/personalInfo")]
public HttpResponseMessage UpdateUser(PersonalInfoModel personalInfo){}

[HttpPost] 
[Route("/api/[controller]/roles")]
public HttpResponseMessage UpdateUser(RolesModel roles){}

答案 1 :(得分:0)

您需要使用Route属性来区分这些方法以供客户端调用。

[Route("api/Update")]
public class UpdateController
{
   [Route("PersonalInfo")]
   [HttpPost] 
   public HttpResponseMessage UpdateUser(PersonalInfoModel 
   personalInfo){}

   [Route("Roles")]
   [HttpPost] 
   public HttpResponseMessage UpdateUser(RolesModel roles){}
}

然后客户端调用pi/Update/PersonalInfo来调用第一个方法,然后 api/Update/Roles调用第二种方法

希望这会有所帮助。