带有动态值的Grapevine Rest Server Route Pathinfo

时间:2017-09-30 21:37:11

标签: c# grapevine

我对C#很陌生,需要实现REST服务,所以我偶然发现了Grapevine。 我需要通过配置文件在服务启动时提供部分服务的URL,但我不能设法移交价值" clientId"配置文件到Route的Pathinfo,因为它不是常量。 这是代码的一部分:

[RestResource(BasePath = "/RestService/")]
public class Rest_Resource
{
    public string clientId =  ConfigurationManager.AppSettings["ClientId"];

    [RestRoute(PathInfo = clientId + "/info")]//<-how do I fill Pathinfo with dynamic values?
    public IHttpContext GetVersion(IHttpContext context)
    {....}
    }

我在visual studio中使用grapevine v4.1.1作为nuget包。

1 个答案:

答案 0 :(得分:0)

虽然可以change attribute values at runtime,甚至可以使用dynamic attributes,但在这种情况下更简单的解决方案可能是不使用自动发现功能,而是使用混合方法进行路由注册。 / p>

考虑以下包含两个休息路径的类,但只有一个用属性装饰:

outgoing <- read_delim("ebys_gidenevrak_rapor.csv", ";", escape_double = FALSE, col_names = FALSE, trim_ws = TRUE,locale = locale(encoding = "utf-8"))

由于您希望使用在运行时之前未知的值来注册第一个路由,我们可以手动注册该路由:

[RestResource(BasePath = "/RestService/")]
public class MyRestResources
{
    public IHttpContext ManuallyRegisterMe(IHttpContext context)
    {
        return context;
    }

    [RestRoute(PathInfo = "/autodiscover")]
    public IHttpContext AutoDiscoverMe(IHttpContext context)
    {
        return context;
    }
}

这需要手动注册需要运行时值的路由,但我们仍然希望自动发现其他路由。由于路由器仅在服务器启动时路由表为空时才会自动发现,因此我们必须告诉路由器何时扫描程序集。您可以在手动注册路由之前或之后执行此操作:

// Get the runtime value
var clientId = "someValue";

// Get the method info
var mi = typeof(MyRestResources).GetMethod("ManuallyRegisterMe");

// Create the route
var route = new Route(mi, $"/RestService/{clientId}");

// Register the route
server.Router.Register(route);