即使我在我的控制器中定义了2个专用的HttpGet动作,即使URL指定了2个不同的动作,也只有一个被调用

时间:2015-03-27 14:53:48

标签: c# asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我正在尝试在我的服务器上为JS插件开发REST API,如http://docs.annotatorjs.org/en/v1.2.x/storage.html中所述。我需要开发的两个API如下:

  1. 索引:索引功能,路径为/annotations,方法为get。我在控制器注释(放在名为api的目录中)中实现了这个,如下所示:

    [HTTPGET]

    public IList annotations(long userID = 2)

  2. 搜索:搜索功能,路径为/search,方法为get。我在同一个控制器中的实现如下:

    [HTTPGET]         public AnnotationSearchResults search(int count,string uri)

  3. 我面临的问题是,如果同时使用以下网址:http://localhost:5555/api/Annotation/search?limit=20&uri=www.abc.comhttp://localhost:5555/api/Annotation/annotations,方法annotation会被调用,但我希望调用搜索方法。我非常喜欢网络开发,并且努力让自从过去2天开始运行。如果这是一个非常基本而明显的问题,请原谅。

1 个答案:

答案 0 :(得分:0)

在App_Start文件夹中,有一个WebApiConfig.cs文件。此处的路由模板默认不包含操作。您需要添加操作路线以获得所需的输出。

Web API的默认路由是

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

向routeTemplate添加 {action} ,如下所示,系统会点击正确的操作网址。

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