2017-11-11 160 views
2

我正在開發包含wwwroot文件夾下的圖像的應用程序。當圖像被調用(something.com/Images/img.png)時,我需要一個代碼才能運行,完成後需要顯示圖像。執行代碼後是否可以將管道重定向到靜態文件(圖像)。 我的代碼看起來是這樣的:重定向到靜態文件asp.net核心

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 
    app.Map("/images", images => 
    { 
     images.Map("/img.png=", img => 
     { 
     HandleImages(app); 
     }); 
    }); 
} 

private void HandleImages(IApplicationBuilder app) 
{ 
    app.Run(async (context) => 
    { 
     //do something 
     //redirect to The Image 
    }); 
} 

我試着用app.UseStaticFiles();的形象出現,但不執行的代碼。

+0

爲什麼不創建看中url的中間件,如果它符合一些條件,然後運行一些代碼,然後讓請求傳遞給其他中間件? – JohanP

回答

2

由於圖片網址相同,因此您無法重定向到相同的圖片 - 這將是不定向的重定向循環。

你有兩個選擇:

  1. 使用不同的網址,圖片,那麼你可以返回重定向響應的形象。
  2. 如果您需要保持圖像URL與處理程序相同,那麼您可以使用image/jpeg等mime標題返回圖像流響應。不需要重定向。

讓我知道是否有任何上述選項爲你工作。

更新。

以下是#1示例 - 使用管道重定向到具有不同URL的圖像。

public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
{ 
    // Make sure static files serving enabled 
    app.UseStaticFiles(); 

    app.Map("/images", images => 
    { 
     images.Map("/img.png", img => 
     { 
      HandleImages(img); 
     }); 
    }); 
} 

private void HandleImages(IApplicationBuilder appBuilder) 
{ 
    appBuilder.Run((context) => 
    { 
     //do something 
     // .. 
     //redirect to The Image 
     context.Response.Redirect("/images/another.jpg"); 
     return Task.FromResult(0); 
    }); 
} 

摘要:

  • 啓用app.UseStaticFiles();
  • img轉換爲HandleImages()方法。
  • 用實際圖像的路徑返回重定向響應。圖片網址必須與映射的處理程序網址不同。
+0

你可以解釋第一個選項 – Batman

+0

@Batman剛剛爲#1選項添加了一個示例。 – Ignas