在servicestack中基于查询字符串参数名称进行路由?

时间:2015-10-07 09:55:06

标签: servicestack

我想根据我的querystring参数路由两个不同的RequestDTO类。 PFB这两种情况。

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 个答案:

答案 0 :(得分: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) { ... }
}

如果实现位于不同的Service类中,您可以使用:

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

这是从IOC解决自动服务并执行它的简写,例如:

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