11

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

有没有办法允许这样做?我想从根目录提供资源。

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

3 回答 3

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);
于 2013-04-15T15:59:41.390 回答
9

您只能在ServiceStack/中的 Route Path 上使用FallbackRoute进行匹配,例如:

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

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

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

  1. 更改EndpointHostConfig.DefaultRedirectPath以重定向到您希望使用的服务
  2. 添加default.cshtmlRazor 或 Markdown 视图或静态default.htm(用于 HTML 请求)
  3. Register a EndpointHostConfig.RawHttpHandlers- 这是在ServiceStack 的 Order of Operations中查看的第一个处理程序。
  4. 注册一个IAppHost.CatchAllHandlers- 这被称为不匹配的请求。
  5. 全局请求过滤器中处理请求
于 2012-11-20T20:21:26.727 回答
0

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

[FallbackRoute("/")]

于 2014-03-06T10:35:58.340 回答