3

MVC WebAPI로 실험 해보았습니다. 그러나 나는 노선의 개념에 고투하고있다.WebAPI 컨트롤러에 도달 할 경로를 지정하는 방법

프로젝트 :

  • 컨트롤러
    • 고객
      • CustomerController.cs
      • CustomerAddressController.cs

        를 예로 들어 나는 다음과 같은 webAPI 프로젝트 구조 뭔가를

  • 제품
    • ProductCategoriesController.cs
    • ProductsController가
  • 은 현재 내가 하나 개의 API 경로가 WebApiConfig.cs에서 정의한

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

    목 고객과 관련된 컨트롤러 만있을 때 제대로 작동합니다. 그래서 호출 할 수 있습니다?

    • GET API를/고객/CustomerAddress/CUSTOMERID =

    하지만 지금처럼 내가 구성을 찾을 수 제품 관련 컨트롤러를 추가 한 1234 (물론) 제품을 얻기 위해 나는 열린 우리당 전화를해야 :

    • GET API/고객/제품/PRODID = 5678 *하지만이 열린
    ,536을 원하지 않는

    대신 내가 원하는 :

    • GET API를/제품/PRODID = 5678

    및 제품 범주에 대한 I는 유사 뭔가 싶습니다?

    • GET API를/제품/범주를 /? catID = 1357

    나는 더 많은 경로를 추가해야한다고 생각했지만, 내가 원하는 경로를 가진 컨트롤러?

    내가 다른 경로를 추가하면 두 개의 서로 다른 uri가 내가 만든 컨트롤러 각각에 라우팅됩니다.

    원하는 논리 파티션을 어떻게 얻을 수 있습니까?

    답변

    6

    웹 API 2를 사용하면 특정 라우팅을 원활하게 정의 할 수 있습니다.예를 들면 다음과 같습니다.

    public class CustomerController : ApiController 
    { 
        [Route("api/customer")] 
        public IEnumerable<Customer> GetCustomers() 
        { 
         // .. 
        } 
    
        [Route("api/customer/{customerID}")] 
        public Customer GetCustomer(int customerID) 
        { 
         // .. 
        } 
    
        [Route("api/customer/CustomerAddresses/{customerID}")] 
        public Address GetCustomerAddresses(int customerID) 
        { 
         // ... 
        } 
    } 
    
    public class ProductController : ApiController 
    { 
        [Route("api/product")] 
        public IEnumerable<Product> GetProducts() 
        { 
         // .. 
        } 
    
        [Route("api/product/{prodID}")] 
        public Product GetProduct(int prodID) 
        { 
         // .. 
        } 
    
        [Route("api/product/categories/{catID}")] 
        public Category GetCategory(int catID) 
        { 
         // ... 
        } 
    } 
    
    +0

    완벽한 : WebAPI가 메서드 장식을 제거했다는 것을 읽고 있었는데, 사실이라면 다시 볼 수있어서 기쁩니다. 답장을 보내 주셔서 감사합니다. – John

    관련 문제