2017-10-25 19 views
1

Sitecore 8.1에서 Atrribute 라우팅이 작동하지 않으므로 다음과 같습니다. https://github.com/Krusen/Sitecore.WebApi
Krusen.Sitecore.WebApi.Custom에 대한 uget 패키지가 있습니다.Sitecore 8.1에서 웹 API 속성 라우팅이 작동하지 않습니다.

이 내 ConfigureWebApi 클래스

public class ConfigureWebApi 
{ 
    public void Process(PipelineArgs args) 
    { 

     GlobalConfiguration.Configure(config => config.Routes.MapHttpRoute(
       name: "myApi", 
       routeTemplate: "api/{controller}/{action}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      )); 
     GlobalConfiguration.Configure(config => config.MapHttpAttributeRoutes()); 
     GlobalConfiguration.Configure(ReplaceControllerSelector); 
    } 

    private static void ReplaceControllerSelector(HttpConfiguration config) 
    { 
     config.Services.Replace(typeof (IHttpControllerSelector), 
      new CustomHttpControllerSelector(config, new NamespaceQualifiedUniqueNameGenerator())); 
    } 
} 

내가이 호출하면이 내 컨트롤러

[RoutePrefix("windows")] 
public class WmsController : ApiController 
{ 
    [HttpGet] 
    [Route("hi")] 
    public IHttpActionResult Hello() 
    { 
     return Ok("Welcome to my Api."); 
    } 

} 

입니다 :

http://my.api.local/api/wms/hello 

작품.
하지만 호출 할 때

http://my.api.local/api/windows/hi 

이 작동하지 않습니다. 그것은 말한다 404.

나는 무엇인가 놓치고있다!

+3

구성에 따르면 'http : // my.api.local/windows/hi'를 호출하면 안됩니까? ('/ api없이) –

답변

1

라우팅 컨트롤러 속성에 "/ API"를 추가해야합니다. 나는 또한 생각

public void Process(PipelineArgs args) { 
    GlobalConfiguration.Configure(config => { 
     // Map Attribute Routes 
     config.MapHttpAttributeRoutes(); 

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

     // Replace IHttpControllerSelector with our custom implementation 
     ReplaceControllerSelector(config); 
    }); 
} 

이 매핑 된 속성 경로

http://my.api.local/windows/hi 
로 매핑 할 것 ApiControllerRoutePrefix("window")Route("hi")

두 번째 링크의 repo에있는 문서에 표시를 기반으로 한 방법이다

http://my.api.local/api/windows/hi을 원하는 작업에 매핑하려면 다른 답변 중 하나에서 이미 설명한대로 경로 접두사를 업데이트해야합니다.

+0

설명 주셔서 감사합니다. :). 이제 작동합니다. – kandroid

0

당신은 속성 라우팅 경로 충돌을 피하기 위해 협약 기반 경로 전에 구성해야하기 때문에 두 번째 호출이 작동하지

[RoutePrefix("api/windows")] 
public class WmsController : ApiController 
{ 
    [HttpGet] 
    [Route("hi")] 
    public IHttpActionResult Hello() 
    { 
     return Ok("Welcome to my Api."); 
    } 

}