我有一个基于.net核心1.0.4构建的大型已经运行的应用程序。我需要在这个应用程序中添加一个micro api,并尝试将一个相当简单的http basic auth中间件集成到管道 only 中,用于调用api控制器。
在我的startup.cs
配置方法中,我有以下内容。
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
//run basic auth only on API calls
app.MapWhen(context => context.Request.Path.StartsWithSegments("/api", StringComparison.OrdinalIgnoreCase), appBuilder =>
{
app.UseMiddleware<BasicAuthenticationMiddleware>();
app.UseMvc();
});
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/site/error");
}
app.UseStaticFiles();
app.UseIdentity();
app.UseDefaultFiles();
app.UseStatusCodePages();
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Site}/{action=Login}/{id?}");
});
}
我的理解是,管道将为以/ api开头的所有调用分支到Basic中间件。我的问题是,使用此代码,无论路径如何,所有调用都会访问.MapWhen
路径,并且基本上会破坏整个站点。