gpt4 book ai didi

c# - 服务堆栈 : Resolve Request DTO from an url

转载 作者:行者123 更新时间:2023-11-30 23:03:29 28 4
gpt4 key购买 nike

有没有什么方法可以利用或重用内部服务堆栈 url 路由到服务的解析来获取该 URL 的匹配请求 DTO?

例如,我们有一项服务聚合指向不同 SS 服务的 URL 字符串列表 - 所有这些服务都生成并返回 PDF:

    public class PDFAggregationService : ServiceStack.Service
{
public BigAssPDFResponse Any(BigAssPDFRequest request)
{
var response = new BigAssPDFResponse();


//does something to fetches list of pdf generating urls
var pdfRoutes = [
"https://server1/route1/param/2/thing/1",
"https://server1/route1/param/3/thing/4",
"https://server1/route2/param/1",
"https://server1/route3/param/1"];




var pdfBytes = new List<object>();
pdfRoutes.ForEach(url=>
{

var requestDto = ???? ; // how to resolve a DTO from a random URL?

var response = Gateway.Send<object>(requestDto);

pdfBytes.Add(response);

})


// does something to aggregate all pdfs into one
// pdfBytes.ForEach(...)

return response;


}
}

我们希望避免实例化 JSONClient 以仅调用 URL,因为所有被调用的服务都位于与 PDFAggreationService 相同的 AppHost 中。 (我们还想使用网关调用,以便我们可以利用我们在各种请求/响应过滤器中实现的一些复杂逻辑)。

最佳答案

我添加了一个新的 Metadata.CreateRequestFromUrl()包装样板的 API,可让您在 this commit 中执行此操作(现在 available from v5.0.3 on MyGet )你可以用来做:

var requestDto = HostContext.Metadata.CreateRequestFromUrl(url);
var responseType = HostContext.Metadata.GetResponseTypeByRequest(requestDto.GetType());
var response = Gateway.Send(responseType, requestDto);

Note your Request DTOs need to have the IReturn<T> marker interface to be able to use the Service Gateway.

这个新 API 有效地包装了下面的样板文件以获取匹配的 RestPath然后您可以使用 /path/info 填充路由定义以及您可以通过网关发送的附加参数字典,例如:

var pathInfo = "/route1/param/1";
var queryParams = new Dictionary<string,string> { ... };

var route = RestHandler.FindMatchingRestPath("GET", pathInfo, out _);
var reqType = route.RequestType;
var requestDto = route.CreateRequest(pathInfo, queryParams, reqType.CreateInstance());

var resType = HostContext.Metadata.GetResponseTypeByRequest(route.RequestType);
var response = Gateway.Send(resType, requestDto);

关于c# - 服务堆栈 : Resolve Request DTO from an url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49888500/

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