加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-core – ASP .NET vNext MVC没有传递给下一个管道?

发布时间:2020-12-16 03:29:47 所属栏目:asp.Net 来源:网络整理
导读:我对ASP .NET vNext有一个麻烦的问题;更具体地说,MVC. 这是我的Startup.cs文件的简化版本: public void ConfigureServices(IServiceCollection services){ // Add MVC services to the services container. services.AddMvc(); services.AddScopedFoo();}pu
我对ASP .NET vNext有一个麻烦的问题;更具体地说,MVC.

这是我的Startup.cs文件的简化版本:

public void ConfigureServices(IServiceCollection services)
{

    // Add MVC services to the services container.
    services.AddMvc();
    services.AddScoped<Foo>();

}

public void Configure(IApplicationBuilder app,IHostingEnvironment env,ILoggerFactory loggerfactory)
{

    app.Use(async (context,next) =>
    {
        await context.RequestServices.GetService<Foo>().Initialize(context);
        await next();
    });
    // Add MVC to the request pipeline.
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",template: "{controller}/{action}/{id?}",defaults: new { controller = "Home",action = "Index" });
    });

    // Time to save the cookie.
    app.Use((context,next) =>
    {
        context.RequestServices.GetService<Foo>().SaveCookie();
        return next();
    });
}

我遇到的问题非常简单:在app.UseMvc()之后,请求管道中的最后一个中间件并不总是被调用.事实上,我可以做出的唯一一致性是我只看到.SaveCookie()在新会话开始时被调用(或CTRL F5).

有没有押韵或理由为什么我的中间件并不总是被执行?

解决方法

如果请求由MVC处理,那么它会将响应发送回客户端,而不是执行管道中的下一个中间件.

如果您需要在您的情况下对响应进行一些后处理,那么您需要在MVC中间件之前注册它.

此外,由于MVC可能正在编写响应,因此修改响应标头(因为它们首先在主体之前发送到客户端)将为时已晚.因此,您可以使用OnSendingHeaders回调来获取修改标头的机会.

以下是一个例子:

app.Use(async (context,next) =>
    {
        context.Response.OnSendingHeaders(
        callback: (state) =>
                  {
                      HttpResponse response = (HttpResponse)state;

                      response.Cookies.Append("Blah","Blah-value");
                  },state: context.Response);

        await next(); // call next middleware ex: MVC
    });

app.UseMvc(...)
{
....
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读