2017-11-11 88 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

相关问题