ASP.NET Web APIヘルプページと関連するMVC.ApiExplorerを使用している場合、http経由でアクセスできる有効なルートがありますが、ApiExplorerでは検出されません。これらのルートは、一般的なルーティングルールが使用されている場合にのみ検出されます。より具体的なルールを(一般的なルールと組み合わせて)使用すると、ApiExplorerからルートが隠されるようです。
3つのルールの例では、2つのルートがコントローラーメソッドのGETアクションとPOSTアクションに関連しており、クエリパラメーターはMIAに送信されません。
public class SomeControllerController : ApiController
{
[HttpPost] public HttpResponseMessage Post(PostObject value) { ... }
[HttpGet] public IEnumerable<DisplayObject> GetAll() { ... }
[HttpGet] public DisplayObject GetById(string id) { ... }
}
のルーティングルールを使用する場合
routes.MapHttpRoute(
name: "ApiDefault",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
ルートは、ApiExplorerによって適切に検出されます。
- POST:api / SomeController
- GET:api / SomeController
- GET:api / SomeController / {id}
しかし、あまり一般的ではなく、より意味のあるルールを追加する場合
routes.MapHttpRoute(
name: "ApiSomeControllerDefault",
routeTemplate: "api/somecontroller/{id}",
defaults: new
{
controller = "SomeController",
id = RouteParameter.Optional
}
);
routes.MapHttpRoute(
name: "ApiDefault",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
ApiExplorerはのみを返します
- GET:api / somecontroller / {id}
一部のルートが見つからない原因は何ですか?