第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Asp.Net Core 2.x 中間件語法

Asp.Net Core 2.x 中間件語法

C#
BIG陽 2021-08-22 15:32:07
我在Startup.Configure()方法中遇到過幾種直接寫簡單中間件的方法:// Syntax 1.app.Use((context, next) =>{    context.Response.Headers.Add("X-Content-Type-Options", "nosniff");    return next();});// Syntax 2.app.Use(async (context, next) =>{    context.Response.Headers.Add("X-Content-Type-Options", "nosniff");    await next();});// Syntax 3.app.Use(async (context, next) =>{    context.Response.Headers.Add("X-Content-Type-Options", "nosniff");    await next.Invoke();});// Syntax 4.app.Use(next =>{    return ctx =>    {        ctx.Response.Headers.Add("X-Content-Type-Options", "nosniff");        return next(ctx);    };});他們都一樣嗎?
查看完整描述

2 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

語法 1 和語法 2 在功能上是不同的。語法 1 不等待next()完成其Task. 語法 1 將一個普通的 lambda 函數(shù)傳遞給Use并返回Task而不等待它完成。語法2傳遞一個asynclambda函數(shù)是awaiting在Task返回之前。該await關鍵字告訴應用程序暫停執(zhí)行,直到next()任務完成。在您的示例代碼中,這可能不會導致功能差異,但有時等待 aTask完成可能會有所不同。


語法 2 和語法 3 在語法上不同,但在功能上相同。語法 2 只是語法 3 的用戶友好版本。參見Func<T>() 與 Func<T>.Invoke()


語法 1 和語法 4 在語法上不同,但在功能上相同。語法 1 只是語法 4 的用戶友好包裝。請參閱UseExtension.cs


// syntax 1,2,3 use this 

public static IApplicationBuilder Use(

    this IApplicationBuilder app, 

    Func<HttpContext, Func<Task>, Task> middleware)

{

    // which calls into syntax4

    return app.Use(next =>

    {

        return context =>

        {

            Func<Task> simpleNext = () => next(context);

            return middleware(context, simpleNext);

        };

    });

}


查看完整回答
反對 回復 2021-08-22
?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

語法 4 是使用Use方法IApplicationBuilder


IApplicationBuilder Use(Func<RequestDelegate, RequestDelegate> middleware)

語法 1、2 和 3 正在使用擴展方法,IApplicationBuilder該方法是語法 4 中先前方法的包裝器。這是實現(xiàn)


public static IApplicationBuilder Use(this IApplicationBuilder app, Func<HttpContext, Func<Task>, Task> middleware)

{

    return app.Use(next =>

    {

        return context =>

        {

            Func<Task> simpleNext = () => next(context);

            return middleware(context, simpleNext);

        };

    });

}

對于語法2和3,有沒有區(qū)別next.Invoke()和next()。它們都編譯為相同的方法。


查看完整回答
反對 回復 2021-08-22
  • 2 回答
  • 0 關注
  • 186 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號