使用ServiceStack为根路径'/'创建路由

时间:2012-11-20 19:31:33

标签: servicestack

我正在尝试为root设置一个RestPath,'/',但它不允许我这样做。它说RestPath '/' on Type 'MainTasks' is not Valid

有没有办法允许这个?我想从根提供资源。

[Route("/", "GET")]
public class MainTasks : IReturn<MainTasksResponse>
{
}

3 个答案:

答案 0 :(得分:9)

您只能在ServiceStack中的路线/路径上与FallbackRoute匹配,例如:

[FallbackRoute("/{Path*}")]
public class Fallback
{
    public string Path { get; set; }
}

这使用通配符来处理每个不匹配的路由(inc。/ foo / bar)。只允许使用1个后备路径。

还有一些其他方法可以处理默认的根路径/:

  1. 更改EndpointHostConfig.DefaultRedirectPath以重定向到您要使用的服务
  2. 添加default.cshtml Razor或Markdown视图或静态default.htm(针对HTML请求)
  3. 注册EndpointHostConfig.RawHttpHandlers - 这是ServiceStack's Order of Operations中查看的第一个处理程序。
  4. 注册IAppHost.CatchAllHandlers - 这会引发不匹配的请求。
  5. Global Request Filter
  6. 处理请求

答案 1 :(得分:9)

这对我有用。我刚刚添加了RawHttpHandler并重写了请求路径。像冠军一样工作。 (这可以在我的AppHost配置功能中找到。)

var conf = new EndpointHostConfig();
{
    DefaultRedirectPath = "/foo",
    AllowFileExtensions = { { "eot" }, { "svg" }, { "ttf" }, { "woff" } },
};

conf.RawHttpHandlers.Add(r =>
{
    if (r.RawUrl == "/")
    {
        HttpContext.Current.RewritePath(conf.DefaultRedirectPath);
    }

    return null;
});

this.SetConfig(conf);

答案 2 :(得分:0)

我一直在尝试这样做,并发现Christopher Davies方法不再适用于自助托管服务的最新服务堆栈。我的服务上的以下内容没有参数。

[FallbackRoute( “/”)]