猿问

方法重载对象

我尝试在 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){}

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


梦里花落0921
浏览 135回答 2
2回答

慕盖茨4494581

您需要使用RouteAttribute 来区分这些方法供客户端调用。[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调用第二个方法希望这可以帮助。

三国纷争

尝试这个[HttpPost][Route("/api/[controller]/personalInfo")]public HttpResponseMessage UpdateUser(PersonalInfoModel personalInfo){}[HttpPost] [Route("/api/[controller]/roles")]public HttpResponseMessage UpdateUser(RolesModel roles){}
随时随地看视频慕课网APP
我要回答