1

다음을 상상 .NET 웹 API는 특정 컨트롤러에 대해 호출되는 메서드에 대한 확장을 허용하지만 기존 기본 컨트롤러가 계속 작동하도록 허용 하시겠습니까? 이 같은점을 확장으로 허용하도록 경로를 구성 하시겠습니까? 그것이 가능한 ASP 구성하는 것입니다 방법</p> <pre class="lang-none prettyprint-override"><code>/api/{controller}/{method}.ab </code></pre> <p>: 웹 API 메소드를 호출, 아무도 제어가 없습니다</p> <p>클라이언트 응용 프로그램하지만, 이러한 각각의 방법은 다음과 같은 확장자로 끝나는 :

예를 들어

우리가 메서드 호출 GetCustomer는, 클라이언트 응용 프로그램은 GetCustomer.ab를 호출하지만 호출이 "고객"컨트롤러의 방법 인 GetCustomer로 라우팅 할 것입니다 경우, 그래서 뭔가 :

http://fake.com/api/SmallService/GetCustomer.ab 

SmallService은 특정 컨트롤러입니다.

다른 컨트롤러가 있지만 이러한 유형의 라우팅 만 특정 컨트롤러에 적용하고 싶습니다.

성능 및 보안상의 이유로 인해 RAMMFAR를 활성화 할 수 없습니다 (RunAllManagedModulesForRequests).

이 .NET 4.6

답변

1

우선에서 실행되는 ASP.NET 웹 API 2되면, MVC 프레임 워크에 전달하는 특정 파일 확장자를 가진 요청을 허용하도록 web.config를 구성합니다.

문제는 IIS가 정적 파일로 .ab 파일을 처리하고 것입니다 것이다 MVC 응용 프로그램을 통해 기본 라우팅하지 가상 .ab 파일을하여. IIS가 요청을 처리하고 MVC 코드가 절대로이 파일로 라우팅 할 수 없습니다.

<system.webServer> 
    <handlers> 
    <!-- other handlers --> 

    <add name="ABHandler" 
     path="*.ab" 
     verb="GET" type="System.Web.Handlers.TransferRequestHandler" 
     preCondition="integratedMode,runtimeVersionv4.0" responseBufferLimit="0" /> 

    <!-- other handlers --> 
    </handlers> 
</system.webServer> 

핸들러에서 허용되는 동사의 주를 가지고 수행합니다

은 요약하면, 여기 .ab 파일이 작동하도록처럼 구성이 어떻게 표시되는지를 보여줍니다. 서비스의 필요에 맞게 업데이트하십시오.

그런 다음 이러한 요청이 하나의 컨트롤러에만 해당되는 경우 해당 경로를 원하는 컨트롤러에 매핑하십시오.

모든 작업이 특정 컨트롤러에 속한 경우 관습 기반 접근 방식을 적용 할 수 있습니다.

public static class WebApiConfig 
    public static void Register(HttpConfiguration config) { 
     // Attribute routing. 
     config.MapHttpAttributeRoutes(); 

     // Convention-based routing. 

     config.Routes.MapHttpRoute(
      name: "SmallServiceApi", 
      routeTemplate: "api/SmallService/{action}.ab", 
      defaults: new { controller = "SmallService" } 
     ); 

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

또한 속성 라우팅을 통해 다른 방법이 있습니다. 당신은 각각의 컨트롤러에있는 모든 조치를 태그해야하고 많은이있는 경우 다음이 매우 반복 될 수있는 환경 설정, 거기에 따라이 방법

[RoutePrefix("api/SmallService"] 
public class SmallServiceController : ApiController { 
    //GET api/SmallService/GetCustomer.ab 
    [HttpGet] 
    [Route("GetCustomer.ab")] 
    public IHttpActionResult GetCustomer() { ... } 

} 

단점.

+1

감사! 실제로 이것은 흥미 롭습니다. web.config에 다음을 추가하여 다른 방법을 찾았습니다. 제대로 작동하는 것 같습니다.

+0

다행 이군. !! – Nkosi

+0

비슷한 문제를 가진 다른 사람들이 자신에게 맞는 해결책을 누릴 수 있도록 자신의 질문에 대한 답변으로 추가해야합니다. – Nkosi