【问题标题】:Create route for root path, '/', with ServiceStack使用 ServiceStack 为根路径“/”创建路由
【发布时间】:2012-11-20 19:31:32
【问题描述】:

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

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

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

【问题讨论】:

    标签: servicestack


    【解决方案1】:

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

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

    这使用通配符来处理每个不匹配的路由(包括 /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 中处理请求

    【讨论】:

    • 谢谢。看来我必须公开“/api”中的所有内容。
    • 创建 default.htm 重定向到 localhost/default.htm。有没有办法直接从localhost 提供服务?
    【解决方案2】:

    这对我有用。我刚刚添加了 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);
    

    【讨论】:

    • 确实很棒,谢谢!我正在使用它使用'[...]HttpContext.Current.Response将'/'重定向到一个完全不同的Url(servicestack应用程序纯粹作为一个不露面的api端点运行&'/'现在重定向到API文档站点)。重定向("somesite.com/api", true);[...]'.
    【解决方案3】:

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

    [FallbackRoute("/")]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-09
      • 2011-08-14
      • 2023-03-30
      • 2013-10-01
      • 2016-12-23
      相关资源
      最近更新 更多