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

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

在 .net 核心應用程序啟動中使用 MapWhen 和 ApplicationBuilder

在 .net 核心應用程序啟動中使用 MapWhen 和 ApplicationBuilder

C#
繁花不似錦 2022-10-23 13:58:52
是否可以進行部分分支啟動?例如,是否有可能有類似的東西:public void Configure(IApplicationBuilder app, IHostingEnvironment env){    app.AlwaysUseThisMiddleware();    app.MapWhen(conditionA, appBuilder => {appBuilder.SometimesUseThisOne;})    app.MapWhen(conditionB, appBuilder => {appBuilder.SometimesUseThisOtherOne;})還是我需要把AlwaysUseThisMiddleware每個分支放在里面?像這樣:public void Configure(IApplicationBuilder app, IHostingEnvironment env){    app.MapWhen(conditionA, appBuilder =>    {        appBuilder.AlwaysUseThisMiddleware(); // Duplicated        appBuilder.SometimesUseThisOne;    )    app.MapWhen(conditionB, appBuilder =>    {        appBuilder.AlwaysUseThisMiddleware(); // Duplicated        appBuilder.SometimesUseThisOtherOne;    )
查看完整描述

1 回答

?
動漫人物

TA貢獻1815條經(jīng)驗 獲得超10個贊

簡短的回答:


是的。它將按您的預期工作。


實際上,當我們Use()一系列中間件的時候,我們就是在注冊一系列中間件,這些中間件在處理請求時會依次調(diào)用。


該MapWhen()方法只不過是調(diào)用Use(). 什么MapWhen(predicate,configFn)是注冊運行如下的東西:


if (predicate(context)){

    await branch(context);

} else {

    await _next(context);

}

結果,當我們調(diào)用 時MapWhen(),我們正在注冊另一個分支處理的中間件。


例如 :


app.UseMiddleware<AlwaysUseThisMiddleware>();                


app.MapWhen(ctx=>ctx.Request.Query["a"]=="1", appBuilder =>{

    appBuilder.UseMiddleware<SometimesUseThisOne>();

});


app.MapWhen(ctx=>ctx.Request.Query["b"]=="1", appBuilder =>{

    appBuilder.UseMiddleware<SometimesUseThisOtherOne>();

})


// ...

基本上,此代碼以以下方式運行:


call  `AlwaysUseThisMiddleware`;


////////////////////////////////////

if (ctx.Request.Query["a"]=="1"){   

    call SometimesUseThisOne ;            

} else {

    //------------------------------------------

    if (ctx.Request.Query["b"]=="1"){

        call SometimesUseThisOtherOne ;

    } else {

        //##################################################

        await _next(context);  // call other middlewares ...

        //##################################################

    }

    //-----------------------------------------

}

////////////////////////////////////

或者,如果您愿意,也可以將其重寫如下:


call `AlwaysUseThisMiddleware` middleware


if(ctx.Request.Query["a"]=="1")           // go to branch 1

    call `SometimesUseThisOne` middleware


else if (ctx.Request.Query["b"]=="1")     // go to branch 2

    call `SometimesUseThisOtherOne` middleware 


else :

    ...

注意這里是一個分支else if而不是if. 并且中間件AlwaysUseThisMiddleware 總是在 branch1 & branch2 之前調(diào)用。


查看完整回答
反對 回復 2022-10-23
  • 1 回答
  • 0 關注
  • 80 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號