1

与えられたuri...

http://localhost:5613/api/user/1/HasCompletedInitialScreen

次のルートを設定しています...

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "ApiUserHasCompletedInitialScreen",
            routeTemplate: "api/user/{id}/{hascompletedinitialscreen}");

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

とコントローラーのアクション...

[HttpGet]
[ActionName("HasCompletedInitialScreen")]
public HttpResponseMessage HasCompletedInitialScreen(int id)
{
    var response = Request.CreateResponse<bool>(HttpStatusCode.Created, true);
    response.Headers.Location = GetLocation(id);
    return response;
}

ただし、404が表示されます。これを機能させるためにルート構成やコントローラーアクションを修正するにはどうすればよいですか?

どうもありがとう!!

アップデート

受け入れられた回答に基づいて、APIルート定義を次のように変更しました。これが他の誰かに役立つことを願っています...

        config.Routes.MapHttpRoute(
            name: "QueryApi",
            routeTemplate: "api/{controller}/{id}/{action}");
4

1 に答える 1

2

何をしようとしているのかわかりませんが、電話をかけたい場合は

http://localhost:5613/api/user/1/HasCompletedInitialScreen

ルートは次のようにする必要があります。

config.Routes.MapHttpRoute(
                name: "ApiUserHasCompletedInitialScreen",
                routeTemplate: "api/user/{id}/{action}",
                defaults: new { controller = "Something" }
            );

アクションSomethingControllerを含むコントローラーの場所。HasCompletedInitialScreen

ActionName補足として、名前がアクションメソッド名と同じ場合、属性を宣言する必要はありません。

于 2012-09-07T21:24:34.493 に答える