1

RESTful 原則を使用して WebAPI プロジェクトをセットアップしようとしていますが、ルート構成についてサポートが必要です。

ここに私が WebAPIConfig.cs で宣言したルートがあります

config.Routes.MapHttpRoute(
            name: "API Child Default",
            routeTemplate: "api/v{version}/{controller}/{id}/{child}",
            defaults: new { version = "1", action = "Index", child = RouteParameter.Optional }
        );

config.Routes.MapHttpRoute(
            name: "DefaultApi With Version",
            routeTemplate: "api/v{version}/{controller}/{id}",
            defaults: new { version = "1", action = "Index", id = RouteParameter.Optional }
        );

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { version = RouteParameter.Optional, id = RouteParameter.Optional }
        );

コントローラーのアクション宣言は次のとおりです。

public class EventsController : ApiController
{
    // GET api/v1/Events
    public IEnumerable<string> Get(string version)
    {
        return new string[] { "value1", "value2" };
    }
}  

これは、コントローラー アクションが見つからない、私が呼び出した要求です: GET /api/v1/Events HTTP/1.1

上記を使用すると見つからないというエラーが発生する理由とその修正方法を誰かに教えてもらえますか?

4

1 に答える 1

2

問題は、宣言したデフォルト アクション ( action = "Index") です。それを取り除けば、うまくいきます。({action}ルートでパラメーターを指定していないため、常にデフォルトのインデックスが実行されますが、これは存在しません)。

config.Routes.MapHttpRoute(
            name: "API Child Default",
            routeTemplate: "api/v{version}/{controller}/{id}/{child}",
            defaults: new { version = "1", child = RouteParameter.Optional }
        );

config.Routes.MapHttpRoute(
            name: "DefaultApi With Version",
            routeTemplate: "api/v{version}/{controller}/{id}",
            defaults: new { version = "1", id = RouteParameter.Optional }
        );
于 2013-09-05T02:17:44.027 に答える