如何重新考虑每个请求 DTO 只能由服务堆栈中的 1 个服务处理



我有两个服务,这两个服务将具有相同的DTO。

[Route("service1GetData","Get")]
[Route("service2GetData","Get")]
public class GetData 
{ 
public string MessageID {get;set;}
public string Message {get;set;}
}

基于服务,我必须执行我通过"容器中的名称实例"重新选择的不同操作

ServiceStack 路由应该有/斜杠,为了保持一致性,HTTP 动词理想情况下应该是大写的,例如:

[Route("/service1/GetData", "GET")]
[Route("/service2/GetData", "GET")]
public class GetData 
{ 
public string MessageID {get;set;}
public string Message {get;set;}
}

如果您说它们是不同的服务,那么它们应该是每个服务的不同 DTO:

[Route("/service1/GetData", "GET")]
public class GetData1
{ 
public string MessageID {get;set;}
public string Message {get;set;}
}
[Route("/service2/GetData", "GET")]
public class GetData2
{ 
public string MessageID {get;set;}
public string Message {get;set;}
}

目前尚不清楚将多个服务合并为单个请求DTO和服务实现的动机是什么,但请阅读DTO和DRY vs Intent的重要性。DTO 定义服务协定,更重要的是它们清楚地捕获服务设计,而不是任何 C# 问题,如 DRY'ing 声明性属性定义。

但是,如果您真的希望它们在同一服务实现中实现,则可以检查服务的base.Request以区分调用服务的路由,例如:

公共类我的服务 { 公共对象任意(获取数据请求( { 如果(基数。Request.PathInfo.StartsWith("/service2/GetData"( {//... } } }

Request.GetRoute()扩展方法还可用于获取调用服务的匹配路由定义。

最新更新