我知道在ServiceStack中使用名称如“Get”,“Post”,“Any”等方法在ServiceStack中创建路由/端点的基本方法,但在特定情况下我正在尝试与我合作我有一个现有的服务(我可以通过继承制作一个IService),它不能用ServiceStack属性进行改装,并且目前使用DTO来处理请求和响应。
此服务包含许多我不想手动屏蔽的功能(因为这是一个传递层),但已经符合ServiceStack的要求。我想知道的是,是否有一种方法可以像我模仿here一样手动创建这些路线。我现有的函数和DTO已经包含了定义路由所需的信息,所以如果这种方法可行,它只需要我在初始化时枚举它们,而不是手动生成服务层。
我注意到Routes.Add上有一个扩展方法,它采用Expression类型的表达式>但我无法实现这一点,因为我相信底层代码会对生成的Expression类型做出假设(LambdaExpression与MemberExpression或类似的东西)。如果那不是该函数的预期目的,我也可能正在咆哮错误的树,但我无法找到关于该变体应该如何工作的任何文档。
我不确定这是否有必要,但是为了解释为什么我要这样做而不是改造现有的图层:当前代码也在Web服务上下文之外使用,并在内部被其他代码使用。将ServiceStack改造到这一层将使每个消耗它的地方都需要ServiceStack的程序集,并且要知道我想要与较低代码分离的Web服务。我们以前使用MVC / WCF来实现这一目标,但我们需要ServiceStack提供的一些功能。
当前架构如下所示: 数据 - > DAL - >离散业务逻辑 - >组成 - >网络服务
希望这有足够的意义而且我不会迟钝。如果您想了解我想要做的更多详情或为什么我会尽快更新这篇文章。
谢谢!
答案 0 :(得分:1)
您可以使用fallback route来提供自己的路由机制。
然后使用您自己的路径映射获取request.Path属性和路由:可以存储在简单字典中的函数。
无论如何,如果你走这条路,我看不到使用servicestack有多大好处。看来你只需要一个将处理请求路由到现有服务的http处理程序。