1

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 など) はクライアント側から適切に入力されており、これら 2 つのアクションを別々に呼び出すと、サーバー側でそれらを見ることができます。ただし、両方のアクションがコントローラーにある場合、どちらのアクションを選択するかを識別できないと表示されます。これは明らかに、サーバー側 (RegisterUser モデルと UserPasswordConfirmModel モデル) に入力しているカスタム オブジェクトが原因です。だからそこに葛藤がある。

これは、ルーティングの問題が原因です。どんな種類の助けにも感謝します。

前もって感謝します。

実際、問題は同じコントローラー内の2つのアクションの競合にあることがわかりました。これら 2 つのアクションを別々に使用すると、正常に動作します。上記のように、同じコントローラーに 2 つのアクションがある場合の処理​​方法がわかりません。カスタム パラメーター バインディングを調べましたが、アクションは個別に正常に動作するため、それが問題だとは思いません。

ありがとう。

4

1 に答える 1

2

簡単に言えば、同じコントローラーで 2 つのアクションを実行しないでください。ただし、必要に応じて、特定のルートを使用します (制約を追加します)。また、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" }
    );
于 2012-09-20T09:12:40.703 に答える