【问题标题】:ASP.NET unable to display imageASP.NET 无法显示图像
【发布时间】:2016-10-20 20:24:08
【问题描述】:

由于我无法控制的原因,我被要求根据使用 UNC 路径的目录结构在网页(类似于画廊视图)上呈现一系列图像。您会注意到,我在处理此问题时使用的是相对路径,但将使用 UNC 约定部署站点。

我已经创建了以下部分视图来渲染图像,我可以稍后进行格式化。

@model System.Collections.Generic.List<string>

@foreach (var image in Model)
{
    <div id="ptImage">
        <img src="@image" alt="@Path.GetFileName(image)"/>
    </div>
}

其中@image 表示需要渲染的图像的绝对路径。

页面视图源中显示的路径是我觉得我应该期待的,并在本地真正定义了图像的位置。当通过相对路径访问图像时,这是其他人所期望的吗?

<div id="gImg">
    <img src="C:\Projects\Test_Site\Site_1\ES3\ES3_0.bmp" alt="ES3_0.bmp" />
</div>
<div id="gImg">
    <img src=" C:\Projects\Test_Site\Site_2\ES4\ES4_0.jpg" alt="ES4_0.jpg" />
</div>

加载局部视图时,我只看到图像的替代文本,而不是图像本身。查看 IIS Express 日志告诉我以下信息:

http://localhost:1348/TestGallery/ 404 0 2 6, This resource 让我明白404 0 2 x 似乎表示找不到资源。

既然确实是文件的路径,那么 IIS 期望什么作为有效输入来定位资源?我不知道如何表达这个问题以进行进一步的搜索。

【问题讨论】:

  • 我认为是权限问题。尝试在图像标签中使用真实路径,例如

标签: c# asp.net-mvc iis-6 unc


【解决方案1】:

img 标签中的src 路径必须是网站 URL,而不是磁盘上的实际文件位置。您的网络应用应翻译 URL 以从适当的位置获取图像。

一种可能的解决方案:

  • 在您的应用程序的RouteConfig.cs 中创建一个自定义条目,以动态处理特定 URL 路径上的所有项目。 (在本例中,它是一个单独的控制器。)

    routes.MapRoute(
        name: "Images",
        url: "image/{*querypath}",
        new { controller = "Image", action = "Retrieve" }
        );
    
  • 在处理任意查询路径的代码中,将相对 URL(在上面的 querypath 中)转换为您要查找的 UNC 路径并提供图像。

    return File(UncRootPath + querypath, "image/png");
    

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 2018-10-18
    • 2013-12-31
    • 2015-11-06
    • 1970-01-01
    • 2016-06-28
    相关资源
    最近更新 更多