【问题标题】:Method Overloading With Objects用对象重载方法
【发布时间】:2018-12-30 14:58:30
【问题描述】:

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

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

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

在我调用的客户端上: /更新用户(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){}

上面的错误也没有工作: “匹配的最佳重载方法有一些无效参数” 我试图在谷歌上查看,但没有成功克服这个问题。

【问题讨论】:

  • 你能显示来自调用 api 的客户端的请求正文吗?
  • 当然@DheerajKumar,我用这个新信息更新了这个问题

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


【解决方案1】:

试试这个

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

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

【讨论】:

  • 欢迎@MartinVengai 加入 Stackoverflow。您能否描述一下这里有什么不同以及为什么这可能有效?这会显着提高您答案的质量,并使其更容易被接受。
  • 我在上面尝试了这个错误:'HttpPostAttribute' 不包含带 1 个参数的构造函数
【解决方案2】:

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

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

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

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

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多