7

次の署名を持つ Get メソッドを持つ LoginController という名前のコントローラーがあります。

public string Get(string Key, string Code, string UserID, string Password)

次のような呼び出しで呼び出すことができるようにしたい:

http://localhost:1234/api/Login/KeyValue/CodeValue/UserValue/PasswordValue

これを機能させることはできません。次のように呼び出しを呼び出した場合:

http://localhost:1234/api/Login?Key=KeyValue&Code=CodeValueUserID=UserValue&Password=PasswordValue 

呼び出しは成功です。

以下のようなルートをGlobal.asaxに追加してみました

 routes.MapHttpRoute(name: "Login", routeTemplate: "api/{controller}/{action}/{Key}/{Code}/{UserID}/{Password}",
                defaults: new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional });

また

 routes.MapHttpRoute(name: "Login", routeTemplate: "api/{controller}/{Key}/{Code}/{UserID}/{Password}",
                defaults: new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional });

これらは機能していないようです。どこが間違っているのですか、それとも可能ですか? MVC3を使用したRCバージョンのWebApiでこれを行うことができました。

4

2 に答える 2

11

リクエスト ( ) のアクションが欠落しているようです/api/Login/KeyValue/CodeValue/UserValue/PasswordValue/api/Login/Get/KeyValue/CodeValue/UserValue/PasswordValue最初のルートを使用する場合は、代わりに試してください。

アクションを指定せずに呼び出し、デフォルトで「Get」を使用できるようにする場合は、デフォルトのアクションを指定する必要があります。

defaults: new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional, Action = "Get" }

ASP.NET MVC 4 プロジェクト (Visual Studio 2012 RC) でこれを試してみました。

アクションを使用して LoginController を作成します。

public string Get(string Key, string Code, string UserID, string Password)
{
    return Key + Code + UserID + Password;
}

Global.asax.cs でルートをマッピングします。

 RouteTable.Routes.MapHttpRoute(null, "api/{controller}/{Key}/{Code}/{UserID}/{Password}",
            new { Key = UrlParameter.Optional, Code = UrlParameter.Optional, UserID = UrlParameter.Optional, Password = UrlParameter.Optional, Action = "Get"});

うまくいかない場合は、別のルートがリクエストをキャッチしているか、ルートが登録されていない可能性があります。

于 2012-10-11T08:22:08.777 に答える
0

アクションなしでルーティングを行おうとしています。できます。

ただし、この場合、コントローラーで属性を使用して、アクション メソッドにラベルを付ける必要があります。次の属性を使用できます: HttpGet、HttpPut、HttpPost、HttpDelete、AcceptVerbs、NonAction。

詳細については、次の記事を参照してください。

http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

于 2012-10-11T08:32:59.937 に答える