ストレートMVCでルートを使用したことがありますが、ASP.NETWebAPIはあまり使用していません。明らかに私は何か間違ったことをしています、おそらく誰かが助けることができますか?UsersControllerという1つのコントローラーと、RegisterとDetailsという2つのメソッドがあり、どちらも2つの文字列パラメーターを受け取り、HttpGetとしてマークされた文字列を返します。もともと私はWebApiConfig.csの2つのルートマッピングから始めました。
config.Routes.MapHttpRoute(
name: "TestApi",
routeTemplate: "api/{controller}/{action}/{userId}/{key}"
);
config.Routes.MapHttpRoute(
name: "Test2Api",
routeTemplate: "api/{controller}/{action}/{userId}/{class}"
);
この設定では、次のようなURLの最初のルートのみが検出されます。
http://<domain>/api/users/register/a123/b456/
私が電話した場合:
http://<domain>/api/users/details/a123/b456/
404を取得します。2つのルートを入れ替えると、Detailsメソッドを呼び出すことはできますが、Registerメソッドを呼び出すことはできず、再び404を取得します。現在の回避策は、ルートをより具体的にすることです。
config.Routes.MapHttpRoute(
name: "TestApi",
routeTemplate: "api/{controller}/register/{userId}/{key}"
);
config.Routes.MapHttpRoute(
name: "Test2Api",
routeTemplate: "api/{controller}/details/{userId}/{class}/"
);
UsersControllerは次のようになります。
namespace HelloWebAPI.Controllers
{
using System;
using System.Web.Http;
using HelloWebAPI.Models;
public class UsersController : ApiController
{
[HttpGet]
public string Register(string userId, string key)
{
return userId + "-" + key;
}
[HttpGet]
public string Enrolments(string userId, string @class)
{
return userId + "-" + @class
}
}
}
したがって、私が理解していないのは、2番目に登録されたルートの{action}コンポーネントが正しいメソッドに関連付けられていない理由です。
ありがとう
ジョー