在自定义模型方面如何做asp.net webapi路由?

时间:2012-09-17 05:37:31

标签: asp.net-web-api asp.net-routing

我正在开发一个ASP.Net WebApi应用程序,并面临路由方面的一些困难。我的WebApi控制器中有以下代码。

public class UserRegistrationServiceWebApiController : ApiController
{

    [HttpPost]
    public void RegisterUser(RegisterUser registerUser)
    {
        /*Some code here*/

    }

    [HttpPost]
    public void ConfirmUserPassword(UserPasswordConfirmModel userPasswordData)
    {
        /*Some code here*/
    }
}

在我的RouteConfig.cs中,我给出了这样的路线。

routes.MapHttpRoute(
            name: "UserRegistrationApi",
            routeTemplate: "api/{controller}/{action}/{firstName}/{lastName}/{email}/{phoneNo}/{company}"
        );

        routes.MapHttpRoute(
            name: "UserPasswordConfirmationApi",
            routeTemplate: "api/{controller}/{action}/{userId}/{password}"
        );

这里的属性(firstName,lastName等)正在从客户端正确填充,当我分别调用这两个动作时,我可以在服务器端看到它们。但是当两个动作都在控制器中时,它表示它无法识别要选择的动作。这显然是因为我填写了服务器端的自定义对象(RegisterUser模型和UserPasswordConfirmModel模型)。所以那里有冲突。

这是因为路由问题。感谢任何帮助。

提前致谢。

实际上我发现问题在于同一控制器中两个动作的冲突。如果我分别使用这两个动作,它们可以正常工作。当我们在同一个控制器中有两个动作时,我不知道如何处理。 我查看了自定义参数绑定,但我不认为这是问题,因为我的操作可以单独处理。

感谢。

1 个答案:

答案 0 :(得分:2)

简短的回答,在同一个控制器上没有两个动作。但是,如果您愿意,请使用特定路线(添加约束)。另外,是否有理由在网址中输入密码?

    routes.MapHttpRoute(
        name: "UserRegistrationApi",
        routeTemplate: "api/{controller}/{action}/{firstName}/{lastName}/{email}/{phoneNo}/{company}",
        constraints = new { action = "RegisterUser" }
    );

    routes.MapHttpRoute(
        name: "UserPasswordConfirmationApi",
        routeTemplate: "api/{controller}/{action}/{userId}/{password}",
       constraints = new { action = "ConfirmUserPassword" }
    );