Catch-All RouteがWebAPI2 Apicontrollerでルートを見つけられない
-
21-12-2019 - |
質問
WebAPI2サービスを作成しており、実装したいメソッドの1つは、内部ツリー構造内のオブジェクトからのHTTP GETを表します。そのため、要求は次の行に沿って行われます。
GET /values/path/path/to/object/in/tree
.
だから私は私の方法が「パス/ /オブジェクト/ /木/木」を受け取ることをお勧めします。
しかし、私がこれを実行するときに404を得るだけで、標準のIIS 404を違う404を得るのは面白いです。それは 'サーバーエラーの "/'アプリケーション"であるのですが、完全に無効なリソースは 'HTTPエラー404.0 - 見つかりません'です。
デフォルトのテンプレートで演奏して、これを働くことができるかどうかを確認してください。したがって類似性。
私は私のRouteConfig
public static void RegisterRoutes(RouteCollection routes)
{
var route = routes.MapRoute(
name: "CatchAllRoute",
url: "values/path/{*pathValue}",
defaults: new { controller = "Values", action = "GetPath" });
}
.
そしてこれは私のValuesController
です:
[System.Web.Mvc.AuthorizeAttribute]
[RoutePrefix("values")]
public class ValuesController : ApiController
{
[Route("test/{value}")]
[HttpGet]
public string Test(string value)
{
return value;
}
[HttpGet]
public string GetPath(string pathValue)
{
return pathValue;
}
}
.
興味深いことに、Controller
ではなくApiController
から派生した場合はOKが機能しますが、通常の属性ルーティングは機能しません。
私はの方法論に従ってみました。この投稿(http://www.tugberkugurlu.com/archive/asp-net-web-patch-all-route-parameter-binding)ですが、働くことができませんでした。
私は愚かに何か簡単に何かを欠けていると確信していますが、それに数時間過ごしたことはそれが私が間違っていることを尋ねることを慎重に思った。
ありがとう
m
解決
Web APIルーティングは、ルーティングMVCと同じではありません。
の代わりにroute.MapRoute
.
を試してください
public static void Register(HttpConfiguration config) {
config.MapHttpAttributeRoutes
config.Routes.MapHttpRoute(
name: "CatchAll", routeTemplate: "values/path/{*pathvalue}",
defaults: new {id = RouteParameter.Optional });
}
.
コントローラから動作する理由は、MaphttpRouteはAPIコントローラ用に設計されている間、MaprouteがMVCコントローラをルーティングするための正しい形式であることです。