我知道我可以使用void reverse (char *s)
{
if (*s!=0) {
reverse (s+1);
printf("%c", *s);
}
}
设置服务的基本路径,以便可以从app.UsePathBase("/AppPath");
获得我的API,但是如果这样做,我的API也可以从根路径{{1}中获得}。如何禁用从根路径的访问?
我也尝试使用像http://foo.com/AppPath/controller1
这样的路由,但是它有同样的问题。
我要这样做的原因是,当它在生产环境中部署时,将部署在应用程序前缀(而不是根应用程序)下,并且在调试过程中在本地主机上运行API时,我想模拟生产章程。
答案 0 :(得分:1)
这是设计上的according to this Github issue。
UsePathBase的主要目的是使这些段脱离您的使用范围,因为它们是部署细节,如果保留这些段,则会弄乱您的路由。
考虑替代方案。如果要禁用根路径,它将如何做? 404并不是很合适,大概是在承载根目录的站点的另一个实例上可以使用该路径。如果您确实想要404,可以使用上面显示的Map。
如果要在访问根目录时返回404,则可以使用嵌套映射,该问题对此进行了介绍:
在这种情况下,您可能希望使用嵌套
MapMiddleware
来更接近此内容:
public void Configure(IApplicationBuilder app)
{
app.Map("/basepath", mainapp =>
{
mainapp.Map("/ping", map => map.Run(async
ctx => await ctx.Response.WriteAsync("pong")));
mainapp.UseMvc();
});
}
通过这种方式,您只能为/basepath
下的请求指定映射,路由等。其他所有内容都将被丢弃并返回404。
对于所有配置调用,您必须记住要调用mainapp
而不是app
。否则,您可能会得到指向根目录而不是自定义基本路径的脚本和CSS URL。您可以通过将Configure(app,env)
中的配置代码提取到单独的方法中来避免这种情况,例如:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.Map("/AppPath", mainapp =>
{
mappedConfigure(mainapp,env);
});
}
private void mappedConfigure(IApplicationBuilder app,IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}