【问题标题】:Redirect to Static file asp.net core重定向到静态文件 asp.net core
【发布时间】:2018-04-24 10:44:16
【问题描述】:

我正在开发一个包含 wwwroot 文件夹下的图像的应用程序。当图像被调用时(something.com/Images/img.png)我需要一个代码来运行,完成后我需要图像出现。执行代码后是否可以将管道重定向到静态文件(图像)。 我的代码如下所示:

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(); 出现图像但代码未执行。

【问题讨论】:

  • 为什么不创建查看 url 的中间件,如果它符合某些条件,然后运行一些代码,然后让请求传递给其他中间件?

标签: asp.net-core middleware static-files


【解决方案1】:

由于图片 URL 相同,您不能重定向到同一张图片 - 这将是一个不定式重定向循环。

你有两个选择:

  1. 为图片使用不同的 URL,然后您可以返回对图片的重定向响应。
  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() 方法。
  • 返回带有实际图像路径的重定向响应。图片 URL 必须与映射的处理程序 URL 不同。

【讨论】:

  • 你能解释一下第一个选项吗