2017-09-30 1 views
0

저는 C#을 처음 접했고 REST 서비스를 구현해야 Grapevine을 발견했습니다. config 파일을 통해 서비스 시작 부분에 전달 된 서비스 URL의 일부가 있어야하지만 config 파일의 "clientId"값을 Route의 Pathinfo에 넘겨주는 것은 관리하지 않습니다. 왜냐하면 경로가 일정하지 않기 때문입니다.Grapevine Rest Server 경로 값 동적 값이있는 경로 정보

[RestResource(BasePath = "/RestService/")] 
public class Rest_Resource 
{ 
    public string clientId = ConfigurationManager.AppSettings["ClientId"]; 

    [RestRoute(PathInfo = clientId + "/info")]//<-how do I fill Pathinfo with dynamic values? 
    public IHttpContext GetVersion(IHttpContext context) 
    {....} 
    } 

내가 비주얼 스튜디오에서 nuget 패키지로 포도 나무 v4.1.1을 사용하고 있습니다 : 다음은 코드의 일부입니다.

답변

0

change attribute values at runtime까지 가능하거나 심지어 dynamic attributes을 사용할 수도 있지만이 경우 더 쉬운 해결책은 자동 검색 기능을 독점적으로 사용하지 말고 경로 등록에 하이브리드 방식을 사용하는 것입니다.

두 나머지 경로를 포함하는 다음 클래스를 고려하지만, 그 중 하나는 속성들로 장식되어 있습니다 :

[RestResource(BasePath = "/RestService/")] 
public class MyRestResources 
{ 
    public IHttpContext ManuallyRegisterMe(IHttpContext context) 
    { 
     return context; 
    } 

    [RestRoute(PathInfo = "/autodiscover")] 
    public IHttpContext AutoDiscoverMe(IHttpContext context) 
    { 
     return context; 
    } 
} 

런타임 때까지 알 수없는 값을 사용하여 첫 번째 경로를 등록 할 때문에, 우리는 수동으로 경로를 등록 할 수 있습니다 :

// Get the runtime value 
var clientId = "someValue"; 

// Get the method info 
var mi = typeof(MyRestResources).GetMethod("ManuallyRegisterMe"); 

// Create the route 
var route = new Route(mi, $"/RestService/{clientId}"); 

// Register the route 
server.Router.Register(route); 

이 수동으로 런타임 값을 필요로 우리의 길을 등록을 담당,하지만 우리는 여전히 다른 경로를 자동으로 발견하고 싶다. 라우터는 서버가 시작될 때 라우팅 테이블이 비어있는 경우에만 자동 검색하므로 라우터가 어셈블리를 검색 할시기를 알려야합니다. 수동으로 경로를 등록하기 전이나 후에이 작업을 수행 할 수 있습니다.

server.Router.ScanAssemblies();