.Map执行所有调用时

时间:2018-01-03 14:37:49

标签: asp.net-core middleware asp.net-core-1.0

我有一个基于.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路径,并且基本上会破坏整个站点。

0 个答案:

没有答案