Web Api路由返回404

时间:2012-09-07 20:31:07

标签: visual-studio-2010 asp.net-web-api visual-studio-2012

鉴于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}");

1 个答案:

答案 0 :(得分: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属性。