2015-10-07 110 views
1

我想根據我的querystring參數路由兩個不同的RequestDTO類。 PFB這兩種情況。根據查詢字符串參數名稱在servicestack中路由?

Scenario 1:- 

localhost:8080/myservice?type="abc" //Service URL 

// should be called below DTO class 

public class TypeRequestDTO //DTO 
{ 
    public string type; 
} 

Scenario 2:- 
-------------------------------------------------- 
localhost:8080/myservice?Name="xyz" //Service URL 

// should be called below DTO class 

public class NameRequestDTO //DTO 
{ 
    public string Name; 
} 

在這兩種情景,base url是相同的(/myservice),但我想這樣做,根據querystring parameter路由。有沒有可能的方法來做到這一點。

回答

1

您無法通過queryString進行路由,queryString僅用於填充由同一服務處理的請求DTO的屬性。

但是你可以委託給不同的服務,比如裏面的服務:

[Route("/myservice")] 
public class Request 
{ 
    public string Type { get; set; } 
} 

public class MyService : Service 
{ 
    public object Any(Request request) 
    { 
     if (request.Type == "abc") 
      return Any(request.ConvertTo<AbcRequest>()); 

     return Any(request.ConvertTo<XyzRequest>()); 
    } 

    public object Any(AbcRequest request) { ... } 

    public object Any(XyzRequest request) { ... } 
} 

如果實現在不同的服務類,你可以使用:

return base.ExecuteRequest(request.ConvertTo<AbcRequest>()); 

這是一個短期用於解析來自IOC的Autowired服務並執行它,例如:

using (var service = base.ResolveService<AbcService>()) 
{ 
    return service.Any(request.ConvertTo<AbcRequest>()); 
}