服务栈重定向到元数据

Servicestack redirect to metadata

我有以下问题:我有一个使用 ServiceStack 的 Web 服务应用程序。我想注册为基本路径“/api”,但即使我将 DefaultRedirectPath 设置为“/api/metadata”,当我启动应用程序时它也不会自动重定向(如果我键入“/api/metadata" 所有作品) 谁能帮我?
这是我在 AppHost 中的代码

public override void Configure(Container container)
{
     SetConfig(new HostConfig
     {
         DefaultRedirectPath = "/api/metadata"
     });
}



public class Startup
{
    public IConfiguration Configuration { get; }

    public Startup()
    {
        Configuration = new ConfigurationBuilder()
          .AddJsonFile("appsettings.json")
          .Build();
    }

    public void ConfigureServices(IServiceCollection services)
    {

    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseServiceStack(new AppHost
        {
            PathBase = "/api",
            AppSettings = new NetCoreAppSettings(Configuration)
        });
    }
}

提前致谢,抱歉我的英语不好

首先,我会考虑不使用 disable the new /api route/api PathBase。例如。如果您没有 /api PathBase,您将自动能够从 /api/Hello.

调用 Hello API

但是,如果您仍想在自定义 /api 路径上托管 ServiceStack,请知道这是 ServiceStack 将被挂载的路径,即 ServiceStack 能够接收任何请求的路径。

这也意味着你应该只使用 /metadata 它将从 ServiceStack 的安装位置重定向,所以如果你有:

public class AppHost : AppHostBase
{
    public AppHost() : base("MyApp", typeof(MyServices).Assembly) {}

    public override void Configure(Container container)
    {
        SetConfig(new HostConfig {
            DefaultRedirectPath = "/metadata"
        });
    }
}

然后调用 https://localhost:5001/api 将重定向到 https://localhost:5001/api/metadata

ServiceStack 只能看到来自 /api 安装位置的请求,因此如果您想将 / 路由重定向到元数据页面,您需要注册自定义 ASP.NET执行此操作的核心处理程序,例如:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    app.UseServiceStack(new AppHost {
        PathBase = "/api",
    });

    app.UseRouting();

    app.UseEndpoints(endpoints => {
        endpoints.MapGet("/", async context => 
            context.Response.Redirect("/api/metadata"));
    });
}

Note: you no longer need to set NetCoreAppSettings() which is populated by default