2

ルーティングの問題があり、解決方法がわかりません。

「UsersController」という名前のコントローラーがあり、2 つの Post アクション関数が含まれています。

public int PostFBLogin(User userObject){}
public void PostUpdateImgUrl(User userObject){}

POST リクエストを作成するときは、リクエスト本文で「User」の JSON 表現を渡します。これらの関数のいずれかをコメントアウトすると、正常に機能します。しかし、両方の関数が存在する場合、それぞれにリクエストを送信しようとすると、次のエラーが発生します。

"Multiple actions were found that match the request:
Int32 PostFBLogin(MestoryServer.Models.User) on type MestoryServer.Controllers.UsersController
Void PostUpdateImgUrl(MestoryServer.Models.User) on type MestoryServer.Controllers.UsersController"

ルーティングテーブルに次のルートを入れて解決しようとしました:

            RouteTable.Routes.MapHttpRoute(
                name: "UserPostUpdateImgUrlAction",
                routeTemplate: "api/users/PostUpdateImgUrl/",
                defaults: new
                {
                    controller = "users",
                    action = "PostUpdateImgUrl"
                }
            );

            RouteTable.Routes.MapHttpRoute(
                name: "UserPostFBLoginAction",
                routeTemplate: "api/users/PostFBLogin/",
                defaults: new
                {
                    controller = "users",
                    action = "PostFBLogin"
                }
            );

しかし、それは役に立ちませんでした。

インターネット上のルーティング テーブルに関する多くの投稿を見た後、署名が同じで名前が異なる 2 つのアクションが存在する可能性があるかどうかさえわかりません。

誰でも助けることができますか?

ありがとう、エディ。

4

1 に答える 1

1

Web API で HTTP 要求を行う場合、呼び出すアクションを識別するために HTTP メソッドが使用されます。HTTP Post リクエストは、「POST」で始まる ApiController 内のメソッドを呼び出します。慣例により、Web API は、HTTP メソッドごとに (最大で) 1 つのメソッドを想定しています。これが、受け取ったエラーの原因です。

Web API の既定のルートはアクションを指定しません。

routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

上記を変更してアクションを含めることができます。たとえば、メソッドの上routeTemplate: "api/{controller}/{action}/{id}"に追加する必要があります。[HttpPost]

または、Web Api コントローラーを 2 つに分割することを検討できます。PostFBLogin メソッドを LoginController に移動し、PostUpdateImgUrl メソッドを UsersController に残すことができます。

于 2012-07-12T17:23:11.817 に答える