Vue.js 具有 ServiceStack 路由回退和 Api 前缀的路由器历史记录模式
Vue.js router history mode with ServiceStack routing fallback and Api prefix
每个客户端路由都以哈希开头。如何在不干扰 api 路由的情况下在 Vue Router 中启用历史模式?
此外,我希望不必以“/api”开始我的路线。客户端路由在 Config.HandlerFactoryPath 设置为 "api" 时不起作用。有办法实现吗?
APPHOST
public class AppHost : AppHostBase
{
private BackendSettings _settings;
private IHostingEnvironment _environment;
public AppHost(BackendSettings settings, IHostingEnvironment environment) : base("Template.Www", typeof(SurveyService).Assembly)
{
_settings = settings;
_environment = environment;
Routes
.Add<GetSurvey>("/api/survey/{id}", "GET");
}
public override void Configure(Container container)
{
bool isDevelopment = _environment.IsDevelopment();
Plugins.Add(new TemplatePagesFeature());
SetConfig(new HostConfig
{
AddRedirectParamsToQueryString = true,
DebugMode = isDevelopment,
});
}
}
启动
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration) => Configuration = configuration;
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var backendSettings = GetBackendSettings();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseServiceStack(new AppHost(backendSettings, env));
}
private BackendSettings GetBackendSettings()
{
var settings = new BackendSettings();
Configuration.GetSection("Backend").Bind(settings);
return settings;
}
private FrontendSettings GetFrontendSettings()
{
var settings = new FrontendSettings();
Configuration.GetSection("Frontend").Bind(settings);
return settings;
}
}
请求模型
[Exclude(Feature.Metadata)]
[FallbackRoute("/{PathInfo}", Matches = "AcceptsHtml")]
public class Fallback
{
public string PathInfo { get; set; }
}
VUE 路由器
export default new Router({
mode: 'history',
routes: [
{
path: '/',
component: Home
},
{
path: '/test',
component: Test
},
{
path: '*',
redirect: '/'
}
]
})
[FallbackRoute]
的目的是 return 不匹配路由上的主页,因此如果路由仅在客户端定义,那么完整页面请求将 return 主页页面,以便客户端路由可以处理路由。
不可能有匹配的服务器路由和客户端路由,因为客户端路由需要服务器上的回退处理程序到return主页,这只发生在不匹配的请求上。
每个客户端路由都以哈希开头。如何在不干扰 api 路由的情况下在 Vue Router 中启用历史模式?
此外,我希望不必以“/api”开始我的路线。客户端路由在 Config.HandlerFactoryPath 设置为 "api" 时不起作用。有办法实现吗?
APPHOST
public class AppHost : AppHostBase
{
private BackendSettings _settings;
private IHostingEnvironment _environment;
public AppHost(BackendSettings settings, IHostingEnvironment environment) : base("Template.Www", typeof(SurveyService).Assembly)
{
_settings = settings;
_environment = environment;
Routes
.Add<GetSurvey>("/api/survey/{id}", "GET");
}
public override void Configure(Container container)
{
bool isDevelopment = _environment.IsDevelopment();
Plugins.Add(new TemplatePagesFeature());
SetConfig(new HostConfig
{
AddRedirectParamsToQueryString = true,
DebugMode = isDevelopment,
});
}
}
启动
public class Startup
{
public IConfiguration Configuration { get; }
public Startup(IConfiguration configuration) => Configuration = configuration;
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
var backendSettings = GetBackendSettings();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseStaticFiles();
app.UseServiceStack(new AppHost(backendSettings, env));
}
private BackendSettings GetBackendSettings()
{
var settings = new BackendSettings();
Configuration.GetSection("Backend").Bind(settings);
return settings;
}
private FrontendSettings GetFrontendSettings()
{
var settings = new FrontendSettings();
Configuration.GetSection("Frontend").Bind(settings);
return settings;
}
}
请求模型
[Exclude(Feature.Metadata)]
[FallbackRoute("/{PathInfo}", Matches = "AcceptsHtml")]
public class Fallback
{
public string PathInfo { get; set; }
}
VUE 路由器
export default new Router({
mode: 'history',
routes: [
{
path: '/',
component: Home
},
{
path: '/test',
component: Test
},
{
path: '*',
redirect: '/'
}
]
})
[FallbackRoute]
的目的是 return 不匹配路由上的主页,因此如果路由仅在客户端定义,那么完整页面请求将 return 主页页面,以便客户端路由可以处理路由。
不可能有匹配的服务器路由和客户端路由,因为客户端路由需要服务器上的回退处理程序到return主页,这只发生在不匹配的请求上。