2017-11-08 6 views
0

mvc 프로젝트를 만들었습니다. 프로젝트에 여러 개의 mvc 컨트롤러가 있는데 제대로 작동합니다. 나는 컨트롤러 API 아래의 프로젝트에서 웹 API 컨트롤러 Cities을 추가했다.mvc 프로젝트에서 생성 된 웹 API 컨트롤러 작업 메서드의 URL을 얻는 방법

이제는이 컨트롤러를 호출 할 수 없습니다. 실제로이 컨트롤러의 URL을 잘 처리 할 수 ​​없습니다. 내 프로젝트에 정적 WebApiConfig 클래스를 추가하고 Application_Start 메서드에서 호출하십시오.

//application start. 
     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
      GlobalConfiguration.Configure(WebApiConfig.Register); 
     } 

//Register web api route 
     public static void Register(HttpConfiguration config) 
     { 
      config.MapHttpAttributeRoutes(); 

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

웹 API 컨트롤러 :

public class CitiesController : ApiController 
    { 
     CityEntities _entity = new CityEntities(); 

     // GET: api/Cities 
     [HttpGet] 
     public IEnumerable<City> Get() 
     { 
      return _entity.Cities.ToList(); 
     } 

     // GET: api/Cities/5 
     public City Get(int id) 
     { 
      return _entity.Cities.Where(x=>x.city_id==id).FirstOrDefault(); 
     } 
    } 

내가 Cities 컨트롤러가 호출하려고 않은 URL.

그러나 작동하지

. 당신이 그 행동에 대한 라우팅 속성을 사용하지 않는 경우

enter image description here

+1

는 메소드 이름이') (가져 오기 '입니다 가정 할 때, 당신은 가정하지 않습니다 URL에'/ Get'을 추가하십시오. – haim770

+0

url에 동사 '/ api/Cities'가 없습니다. – Shyju

+0

URL을 알려주시겠습니까? –

답변

0

, 다음 조치는 API 경로를 기본값으로 매핑해야합니다. API 경로에 대한 기본 경로 템플릿을 살펴보십시오 :

API/{컨트롤러}/{ID가}

고려해야 :

  • 이 경로는 api 경로 세그먼트가 있습니다. 따라서 두 번째 URL은 기본 API 경로와 일치하지 않습니다.
  • 이 경로에는 action 매개 변수가 없습니다. 이는 ApiController의 동작이 요청의 HTTP 메소드에 매핑되기 때문입니다. 요청 URL에 작업 이름을 지정하면 안됩니다. 규칙에 따라 HTTP GET 요청의 경우 동작 이름은 Get word로 시작해야합니다.

그래서이, 당신의 행동은 다음과 같은 HTTP GET 요청에 매핑해야합니다

GET http://localhost:56261/api/Cities 
GET http://localhost:56261/api/Cities/5 

추가 읽기 : Routing in ASP.NET Web API

+0

이 URL이 작동하지 않습니다. –

+0

@UsfNoor 그러면 실행하려고하는'Cities' 컨트롤러와 액션의 정의를 보여 주어야합니다. 컨트롤러 이름은 무엇입니까? ApiController에서 상속합니까? 라우팅 속성을 사용합니까? 행동의 이름은 무엇입니까? 또한 포트 번호가 정확한지 확인하십시오 –

+0

다른 도시 컨트롤러가 잘 실행되기 때문에'Cities' 컨트롤러 코드를 추가했습니다 –