C# ASP.NET WEB API中的Url路由顺序

C# ASP.NET WEB API中的Url路由顺序,c#,asp.net-mvc-4,asp.net-web-api,C#,Asp.net Mvc 4,Asp.net Web Api,我在employeedetails控制器中有四种get方法,如下所示 1) 雇员() 2) 详细信息(id) 3) 团队信息(id) 4) 详细信息RTEAM(id)和控制器为: 我想这样的网址 1) api/Employees而不是url/employeedetails/Employee 后来 2) api/详细信息/id 3) api/TeamInfo/id 4) api/DetailsFortam/id 这是我的RouteConfig.cs配置 public static void Reg

我在
employeedetails
控制器中有四种get方法,如下所示

1) 雇员()

2) 详细信息(id)

3) 团队信息(id)

4) 详细信息RTEAM(id)和控制器为:

我想这样的网址

1) api/Employees而不是url/employeedetails/Employee 后来

2) api/详细信息/id

3) api/TeamInfo/id

4) api/DetailsFortam/id

这是我的
RouteConfig.cs
配置

public static void RegisterRoutes(RouteCollection routes)
        {
           routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

         routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
            routes.MapRoute(
               name: "Employees",
               url: "api/employeedetails/Employees",
               defaults: new { controller = "EmployeeDetails", action = "Employees" }
            );
             routes.MapRoute(
            name: "GetEmployeeDetailsById",
            url: "api/employeedetails/Details/{id}",
            defaults: new { controller = "EmployeeDetails", action = "Details", id = UrlParameter.Optional }
        );

            routes.MapRoute(
            name: "GetTeamMember",
            url: "api/employeedetails/TeamInfo/{id}",
            defaults: new { controller = "EmployeeDetails", action = "TeamInfo", id = UrlParameter.Optional }
        );

           routes.MapRoute(
            name: "GetTeamMemberById",
            url: "api/employeedetails/DetailsForTeam/{id}",
            defaults: new { controller = "EmployeeDetails", action = "DetailsForTeam",id = UrlParameter.Optional}
        ); 
        }
    }
这是我的WebApiConfig.cs

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

我应该更改什么?

我建议使用属性路由。在web api配置中,添加:

config.MapHttpAttributeRoutes();
在控制器中:

[RoutePrefix("api")]
public class EmployeeDetailsController
你的行动是:

[HttpGet] // if you are calling via GET verb
[Route("Employees")]
public IHttpActionResult Employees()
{
}

[HttpGet] // if you are calling via GET verb
[Route("Details/{id}"]
public IHttpActionResult Details(int id)
{
}

[HttpGet] // if you are calling via GET verb
[Route("TeamInfo/{id}"]
public IHttpActionResult TeamInfo(int id)
{
}

[HttpGet] // if you are calling via GET verb
[Route("DetailsForTeam/{id}"]
public IHttpActionResult DetailsForTeam(int id)
{
}

默认路径
移动到末尾(顺序很重要)。然后将路由更改为
url:“api/Employees”,
etcI同意@StephenMuecke,您应该将特定的路由放在顶部,将通用的路由放在底部。仍然会出现错误“没有找到与请求URI匹配的提供控制器名称的路由”@Mahek,你有
员工控制器吗?@Mahek我想你把mvc路由和webapi路由搞混了。显示的第一个代码段用于配置mvc路由,第二个代码段用于web api。