Owin IAppBuilder.Map意外地处理了所有请求

时间:2014-10-28 15:22:03

标签: c# asp.net owin katana

string path = "/SomeSubPath";
            app.Map(new PathString(path),
                (application) =>
                {
                    app.Run((ctx) =>
                    {
                        Debug.WriteLine("{0} : {1}", path, ctx.Request.Path);

                        return Task.FromResult(0);
                    });
                });

            app.Use(async (ctx, next) =>
            {
                var watch = new Stopwatch();

                watch.Start();
                await next();
                watch.Stop();
                Debug.WriteLine("Request handled in {0} [ms]", watch.ElapsedMilliseconds);
            });

            app.Use(async (ctx, next) =>
            {
                Debug.WriteLine("{0} : {1}", "/", ctx.Request.Path);
                await next();
            });

考虑上面的管道配置。

在我的创业课程中,我想映射" SomeSubPath"到独家中间件处理程序。 IE浏览器。以" / SomeSubPath"开头的请求应由一些独家中间件处理,而所有其他请求应由管道的其余部分处理。我使用的IAppBuilder.Map扩展名为here。令我惊讶的是,中间件正在拦截所有请求,从而抑制应用程序的其余部分处理这些请求。

  • 为什么会这样?
  • 我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:9)

像这样更改此块。在Map内,您使用app代替application

       app.Map(new PathString(path),
        (application) =>
        {
            application.Run((ctx) =>
            {
                Debug.WriteLine("{0} : {1}", path, ctx.Request.Path);

                return Task.FromResult(0);
            });
        });