2017-10-18 12 views
0

라우팅 기본 대 {컨트롤러}/{동작}/{ID} :웹 API 라우팅 나는 그 요청에 응답 할 수있는 컨트롤러를 만들려는

  1. API/사용자/123
  2. API/사용자/UsersOfCompany? ID = 123 & & pageIndex = 0 pageSize가 = 20
  3. API/사용자/AllowedCompanies? ID = 123 & & pageIndex = 0 pageSize가 = 10

이것은 실제 코드입니다.

사용자 컨트롤러

public class UserController : ApiController 
{ 
    [HttpGet] 
    public IHttpActionResult Get(int id) 
    { 
     //... implementation... 
    } 

    [HttpGet] 
    [ActionName("UsersOfCompany")] 
    public IHttpActionResult UsersOfCompany(int id, [FromUri] Paging paging) 
    { 
     //... implementation... 
    } 

    [HttpGet] 
    [ActionName("AllowedCompanies")] 
    public IHttpActionResult AllowedCompanies(int id, [FromUri] Paging paging) 
    { 
     //... implementation... 
    } 
} 

WebApiConfig

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Servizi e configurazione dell'API Web 

     // Route dell'API Web 
     config.MapHttpAttributeRoutes(); 

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

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

     config.MessageHandlers.Add(new LanguageMessageHandler()); 
    } 
} 

RouteConfig

public class RouteConfig 
{ 
    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 } 
     ); 
    } 
} 

requ에 샘플을 바탕으로 지금은 마지막 2 개 요청 (UsersOfCompany, AllowedCompanies)를 호출 할 수

  1. Get(int id)
  2. UsersOfCompany(int id, [FromUri] Paging paging)
  3. AllowedCompanies(int id, [FromUri] Paging paging)

을하지만 : 동부 표준시 위, 나는 직장이 방법을 라우팅하고 싶습니다.

"Could not find an HTTP resource that matches the request's URL 'Service/api/User/123'.", "Unable to find an action on the 'User' controller with name '42887'."

가 이미 경로 등록의 순서를 반전하려고하지만 난 그 api/User/123 전화 작품과 다른 사람이되지 않도록, 반대 동작을 otained : 나는 API/사용자/123 호출 할 때 나는이 오류가 발생합니다.

어디에 문제가 있습니까?

+2

찾을 우리에게 요구하는 문제는 무엇인가? 오류 메시지가 있습니까? 그렇다면 언제 또는 어디에서 발생합니까? – NightOwl888

+0

죄송합니다 ... 질문이 업데이트되었습니다. :-) –

답변

3

오류 메시지에 WebApi가 Service/api/User/123의 첫 번째 패턴 (api/{controller}/{action}/{id})과 일치합니다.

당신은 당신의 WebApiConfig에 등록 순서를 변경하거나 명시 적으로 경로를 지정을 시도 할 수 있습니다 :

[Route("api/User/{id:int}")] 
[HttpGet] 
public IHttpActionResult Get(int id) 
{ 
    //... implementation... 
}