MapHttpRouteの概念を完全に誤解しているかもしれません。私はasp.net web apiを開発しています。ASP.Net MVC Web API複数のコントローラのMapHttpRouteは1つ以上のパラメータを取ることはありません
私はMyUserController.csとMyTaskController.csを持っています。 MyUserControllerはユーザー名/パスワードを受け取り、セッションキーを返します。これは期待通りに動作します。
しかし、MyTaskControllerは、2番目のパラメータを渡すと不平を言っています。 http://localhost:59720/api/mytask/somesessionkey -
http://localhost:59720/api/mytask/somesessionkey/1に動作します - 動作しない、次のエラーに
を{ "メッセージ": "要求されたリソースは、HTTPメソッドをサポートしていません 'GET' を。"}スロー
私は方法で[HttpGet]を試してみました。
MyTaskController.cs
//works fine
public IEnumerable<MyTask> Get(string sessionkey)
{
MyTaskModel mtm = new MyTaskModel();
return mtm.GetAll();
}
//doesn't work
public string Get(string sessionkey, int id)
{
if(isValid(sessionkey))
{
return DataAccess().GetTask(id);
}
return "";
}
MyUserController.cs
public string Get(string username, string password)
{
string sessionkey = "tempsession";
return sessionkey;
}
WebApiConfig.cs
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "MyUserApi",
routeTemplate: "api/{controller}/{username}/{password}",
defaults: new { controller = "MyUser" }
);
config.Routes.MapHttpRoute(
name: "MyTaskApi",
routeTemplate: "api/Mytask/{sessionkey}/{id}",
defaults: new
{
controller = "MyTask",
id= RouteParameter.Optional
}
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Formatters.Remove(config.Formatters.XmlFormatter);
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("application/json"));
}