Как выполнить маршрутизацию webapi asp.net, когда речь идет о пользовательских моделях?

Я разрабатываю приложение 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). Так что конфликт есть.

Это связано с проблемой маршрутизации. Цените любую помощь.

Заранее спасибо.

На самом деле я выяснил, что проблема в конфликте двух действий в одном и том же контроллере. Если я использую эти два действия по отдельности, они работают нормально. Я не знаю, как поступить, когда у нас есть два действия в одном контроллере, как указано выше. Я просмотрел привязку пользовательских параметров, но не думаю, что это проблема, поскольку мои действия работают нормально по отдельности.

Спасибо.


person Thilok Gunawardena    schedule 17.09.2012    source источник


Ответы (1)


Короткий ответ, не делайте два действия на одном контроллере. Но если вы хотите, используйте определенные маршруты (добавьте ограничение). Кроме того, есть ли причина иметь пароль в URL-адресе?

    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" }
    );
person aanund    schedule 20.09.2012
comment
Что не сработало? Исключения? Сообщение об ошибке? Всегда ли он идет по одному и тому же маршруту, независимо от того, что вы делаете? - person aanund; 24.09.2012
comment
да, сэр, выдается то же сообщение об ошибке, поскольку в контроллере есть одно или несколько действий, которые могут соответствовать этому маршруту. - person Thilok Gunawardena; 24.09.2012