gpt4 book ai didi

c# - 有没有办法在 ServiceStack 中手动调用路由,只使用一个字符串,否则它就是它的 URL?

转载 作者:行者123 更新时间:2023-11-30 14:58:03 24 4
gpt4 key购买 nike

我在 ServiceStack 中有这样一个 DTO

[Route("/skillslist/{TaskTypeId*}", WebMethods.Get)]
public class GetSkillsList : IReturn<List<SkillDto>>
{
public long? TaskTypeId { get; set; }
}

和这样的服务方法

public List<SkillDto> Get(GetSkillsList request){...}

在另一个不相关的方法中(在同一个程序集的另一个服务上,同一个主机上),我想触发上面的路由并得到它的结果,当我只有一个像“/skillslist/5”这样的准备好的路由字符串时。

有人能告诉我怎么做吗?

最佳答案

ServiceStack 中的服务本质上只是普通的自动连接类(注入(inject)了当前的 RequestContext)。从任何服务内部,您都可以使用 base.ResolveService<TService> 所有其他服务,例如:

public object Any(AnotherRequest request)
{
using (var service = base.ResolveService<GetSkillsService>())
{
List<SkillDto> results = service.Get(new GetSkillsList { ... });
}
}

注意:这只是一个标准的 C# 方法调用,即它只是解析来自 IOC 的服务并执行它,因此没有性能损失,因为它不执行任何 HTTP 或 DTO 反/序列化等。

并且从 ServiceStack 外部(例如在 MVC 中)您可以使用 AppHostBase.ResolveService 调用服务,例如:

using (var service = AppHostBase.ResolveService<GetSkillsService>(HttpContext.Current))
{
List<SkillDto> results = service.Get(new GetSkillsList { ... });
}

仅使用路径信息执行服务

1) 获取 IRestPath与:

var controller = EndpointHost.Config.ServiceController;
var restPath = controller.GetRestPathForRequest("GET","/skillslist/5");

2) 创建一个新实例:

var queryString = new Dictionary<string,string>();
var request = restPath.CreateRequest("/skillslist/5", queryString, null);

3) 然后执行:

var response = controller.Execute(request, base.RequestContext);

关于c# - 有没有办法在 ServiceStack 中手动调用路由,只使用一个字符串,否则它就是它的 URL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19819636/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com