Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# web api中具有多个自定义操作的路由配置_C#_Asp.net Web Api_Asp.net Web Api Routing - Fatal编程技术网

C# web api中具有多个自定义操作的路由配置

C# web api中具有多个自定义操作的路由配置,c#,asp.net-web-api,asp.net-web-api-routing,C#,Asp.net Web Api,Asp.net Web Api Routing,因此,我在两个不同的控制器中得到的方法似乎不能同时工作。我的路线配置如下所示: public static void Register(HttpConfiguration config) { // Web API configuration and services // Configure Web API to use only bearer token authentication. config.SuppressDefaultHostAuthentication(

因此,我在两个不同的控制器中得到的方法似乎不能同时工作。我的路线配置如下所示:

public static void Register(HttpConfiguration config)
{

    // Web API configuration and services
    // Configure Web API to use only bearer token authentication.
    config.SuppressDefaultHostAuthentication();
    config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

    // Web API routes
    config.MapHttpAttributeRoutes();

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

    config.Routes.MapHttpRoute(
        name: "GetGroupsFromSection",
        routeTemplate: "api/{controller}/{action}/{sectionId}"
    );

    config.Routes.MapHttpRoute(
        name: "ReturnCountForGroup",
        routeTemplate: "api/{controller}/{action}/{groupIdCount}"
   );
}
使用此配置,第一个路由(GetGroupsFromSection)可以工作,但另一个路由不能工作。如果我将它们切换为ReturnCountForGroup是第一个,那么其中一个有效,而另一个无效

这就是方法

在GroupController中:

[HttpGet]
public IEnumerable<Group> GetGroupsFromSection(int sectionId)
{
    var allGroups = groupRepository.SearchFor(s => s.SectionId == sectionId).ToList();

    return (IEnumerable<Group>)allGroups;
}
[HttpGet]
public int ReturnCountForGroup(int groupIdCount)
{
    var count = dataContext.ActivationCode.Count(c => c.GroupId == groupIdCount);
    return count;
}
GetGroupsFromSection得到了一个200 ok。但是ReturnCountForGroup会收到以下错误消息:

“MessageDetail”:“在与请求匹配的控制器“ActivationCode”上未找到任何操作。”


存在冲突的路线,需要更具体地进行路线匹配。此外,将路由添加到路由表的顺序也很重要。在更具体/目标路线之后,需要添加更多通用路线

config.Routes.MapHttpRoute(
    name: "GetGroupsFromSection",
    routeTemplate: "api/Group/{action}/{sectionId}",
    defaults: new { controller = "Group" }
);

config.Routes.MapHttpRoute(
    name: "ReturnCountForGroup",
    routeTemplate: "api/ActivationCode/{action}/{groupIdCount}",
    defaults: new { controller = "ActivationCode" }
);

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