2015-10-07 114 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>()); 
} 
相关问题