2015-01-26 47 views
0

我可以從服務堆棧服務中的url路由檢索操作DTO嗎?服務堆棧:從路由到運行

例子:

public class HelloService : IService 
{ 

    public object Any(HelloRequest request) 
    { 
//Here I want to retrieve operation Dto. 
//In this case if request.AnotherApiRoute is "/another?Age=33" 
//then result could be operation AnotherRequest 

     return new HelloResponse { Result = "Hello, " + name }; 
    } 
} 

public class AnotherApiService : IService 
{ 
     public object Another(AnotherRequest request) 
     { 
      return new AnotherResponse { Result = "Your Age : " + Age }; 
     } 
} 

//營運

[Route("/hello/{Name}")] 
public class Hello : IReturn<HelloResponse> 
{ 
    public string Name { get; set; } 
    public string AnotherApiRoute {get; set;} 
} 

public class HelloResponse 
{ 
    public string Result { get; set; } 
} 

[Route("/another/{Age}")] 
public class AnotherRequest : IReturn<AnotherResponse> 
{ 
    public string Age { get; set; } 
} 

public class AnotherResponse 
{ 
    public string Result { get; set; } 
} 

感謝您的建議

回答

0

如果你想訪問HTTP請求上下文的服務被執行的,則應該從繼承方便Service基類(或者你的服務也執行IRequiresRequestContext,所以請求被注入),例如:

public class HelloService : Service 
{ 
    public object Any(Hello request) 
    { 
     var pathInfo = base.Request.PathInfo; 
     return new HelloResponse { Result = "Hello, " + name }; 
    } 
} 

但是你以後還不清楚,因爲請求DTO 操作DTO該請求。

public class HelloService : Service 
{ 
    public object Any(Hello request) 
    { 
     using (var service = base.ResolveService<AnotherService>()) 
     { 
      var anotherDto = request.ConvertTo<Another>(); 
      return service.Any(anotherDto); 
     } 
    } 
} 

或者你可以通過傳遞執行服務:相反,如果你想從你的服務中調用其他服務,您可以解決從國際奧委會的服務與(這也注入當前的HTTP請求)做在請求DTO中,並讓ServiceStack調用相應的服務,例如:

public class HelloService : Service 
{ 
    public object Any(Hello request) 
    { 
     var anotherDto = request.ConvertTo<Another>(); 
     return base.ExecuteRequest(anotherDto); 
    } 
} 
+0

感謝Mythz爲您的答案。 – MetalMad 2015-01-27 13:49:16