C# 图像的ImageUrl中的Exclute/ignore参数,但仍在中继器中显示

C# 图像的ImageUrl中的Exclute/ignore参数,但仍在中继器中显示,c#,asp.net,visual-studio,image,repeater,C#,Asp.net,Visual Studio,Image,Repeater,我在中继器里有一个图像控制器。我希望排除/忽略imageurl属性中的参数,因为pathsource图像的名称中没有此参数,但我仍希望在url中显示该参数。我不能重命名所有的图片,因为有很多。希望它有意义 这里有一个例子 这是搜索引擎优化。原始路径 /产品/0001_100_00_KK00_F02.png 我想在imageurl中显示的内容 /product/0001_100_00_KK00_F02.png/Tv-Sony-lcd-black-bravia-KDL-26V4500 或 /产品/0

我在中继器里有一个图像控制器。我希望排除/忽略imageurl属性中的参数,因为pathsource图像的名称中没有此参数,但我仍希望在url中显示该参数。我不能重命名所有的图片,因为有很多。希望它有意义

这里有一个例子

这是搜索引擎优化。原始路径

/产品/0001_100_00_KK00_F02.png 我想在imageurl中显示的内容

/product/0001_100_00_KK00_F02.png/Tv-Sony-lcd-black-bravia-KDL-26V4500 或

/产品/0001_100_00_KK00_F02/Tv-Sony-lcd-black-bravia-KDL-26V4500.png 这适用于原始路径。但是当我把/Tv-Sony-lcd-black-bravia-KDL-26v4500添加到url的末尾时,当然找不到图像

那么,如何在imageurl中添加一个额外的参数,但让image控件忽略此参数并仍然找到映像路径呢


有人知道如何解决这个问题吗?

像这样的URL有用吗

/产品/0001_100_00_KK00_F02.png?Tv-Sony-lcd-black-bravia-KDL-26V4500

只要在文件名后面加一个问号,图像就会显示得很好。正如@Jon Edgerton所指出的,IIS没有找到您的图像,这就是它没有显示的原因


如果您想要一个完全自定义的URL,那么您必须重新编写一些URL。这里有一篇关于这方面的文章:。

您可以通过URL重写来实现这一点。将global.asax文件添加到项目中,并使用如下某种重写逻辑

    void Application_BeginRequest(Object sender, EventArgs e)
{
    string currentPath;
    currentPath = Request.Path; // /product/0001_100_00_KK00_F02.png/Tv-Sony-lcd-black-bravia-KDL-26V4500
    if (currentPath.IndexOf(".png") > -1)
    {
        string[] paths = currentPath.Split('/');
        currentPath = currentPath.Replace("/" + paths[paths.Length - 1], ""); // /product/0001_100_00_KK00_F02.png
        Context.RewritePath(currentPath);
    }
}
这将起作用,但也将重写包含.png的所有request.path,因为if currentPath.IndexOf.png>-1
更安全的做法是增加一些条件。

图像控件没有找到图像,它只输出您请求的URL。能否找到图像是一个web服务器如何响应客户端浏览器对图像URL的请求的问题。谢谢你们的快速回复:到目前为止,这两种解决方案对我来说似乎都很有效。现在处于测试模式。请确保您接受答案,并投票选出对您有帮助的答案。感谢您的快速回复:到目前为止,这两种解决方案对我来说似乎都很有效。现在处于测试模式。。
    rptImages.DataSource = Images.Select(s => new { Url = s });
    rptImages.DataBind();
    void Application_BeginRequest(Object sender, EventArgs e)
{
    string currentPath;
    currentPath = Request.Path; // /product/0001_100_00_KK00_F02.png/Tv-Sony-lcd-black-bravia-KDL-26V4500
    if (currentPath.IndexOf(".png") > -1)
    {
        string[] paths = currentPath.Split('/');
        currentPath = currentPath.Replace("/" + paths[paths.Length - 1], ""); // /product/0001_100_00_KK00_F02.png
        Context.RewritePath(currentPath);
    }
}