2015-08-24 26 views
2
public IEnumerable<Employee> GetEmployees() 
{ 
    //code and return 
} 

public Employee GetSingleEmployee(int Id) 
{ 
    //code and return 
} 

這就是我現在擁有的。我試圖讓應用程序通過get call api/employee調用第一個函數,第二個函數通過api/employee /(一個ID號)(例如api/employee/75)調用api/employee /(一個ID號)。獲取電話總是會轉到第一個。我該如何解決這個問題?C#MVC中的兩個GET函數

這是我的路由:

namespace EmployeeApp 
{ 
    public class RouteConfig 
    { 
      public static void RegisterRoutes(RouteCollection routes) 
      { 
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
        routes.MapRoute(
         name: "Default", 
         url: "{controller}/{action}/{id}", 
         defaults: new { action = "Index", id=UrlParameter.Optional } 
        ); 
      } 
    } 
} 
+6

顯示你的路由。默認情況下'id'而不是'Id'應該可以工作 –

+1

我們需要看到你的路由以幫助..它可能是一個查詢字符串問題。 –

+1

該路由看起來像MVC路由的默認值 - 不是web api – Ric

回答

4

使用註釋像

[HttpGet] 
[Route("employee")] 
public IEnumerable<Employee> GetEmployees() 
{ 
    //code and return 
} 
[HttpGet] 
[Route("employee/{Id}")] 
public Employee GetSingleEmployee(int Id) 
{ 
    //code and return 
} 

在類上面你RoutePrefix到

[RoutePrefix("api")] 
1

正如其他人沒有看到說你的路由可能是很難猜到,但假設它是這樣的:

routes.MapHttpRoute(
    name: "API Default", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

可選的id參數應該只要方法參數爲小寫就可以工作。

如果你想使用的動作作爲路由的一部分,那麼利用這一點,把它的默認路由上面:

routes.MapHttpRoute(
    name: "Api By Action", 
    routeTemplate: "api/{controller}/{action}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 
相關問題