4

我认为 MVC3 有一个奇怪的问题。我的 css 文件包含一个用于 IE 的 @font-face,如下所示:

@font-face {
    font-family: AvantGardeNormal;
    src: url('fontname.eot');
}

它在本地(在我的机器上)运行良好,但是当我发布到服务器(Azure)时,我收到了这个错误:(就像它试图像控制器中的操作一样访问字体文件)错误(System.Web.HttpException ): 路径“/Content/fontname.eot”的控制器未找到或未实现 IController。

当然,字体不会加载。

谢谢。

4

4 回答 4

2

将每个字体文件的“构建操作”设置为“内容”,否则将不会部署它们。

于 2012-05-30T14:38:29.583 回答
1

有几种方法可以验证参考、内容或数据文件是否是部署的一部分。大多数常见的描述如下:

首先,您可以检查引用的属性或静态内容,以查看“Copy Local”是否设置为“True”。

其次,您可以解压缩 CSPKG 文件(如果需要,将其重命名为 zip),然后解压缩 CSPKG 中的 CSSX 文件。解压缩 CSSX 文件后,您可以看到那里可用的内容,因为这是部署后您的应用程序可用的内容。

第三,如果您可以通过 RDP 访问您的 Azure VM,您只需使用您的 RD 凭据登录并查找驱动器 E: 和文件夹 Approot\ 文件夹以获取所有引用和静态内容。

于 2012-05-10T16:09:07.753 回答
0

本周我遇到了同样的问题,将带有可下载字体的 MVC 应用程序部署到运行 IIS 的服务器上。

为了让 IIS 返回正确的内容,它使用一个名为 MimeTypes 的查找表。基本上是文件扩展名查找。您必须将 .eot 文件扩展名添加到 IIS 或 web.config 中的 Mimetypes

<system.webServer>
   <staticContent>
     <remove fileExtension=".eot" />
     <mimeMap fileExtension=".eot" mimeType="application/application/vnd.ms-fontobject" />
   </staticContent>    
</system.webServer>

起初对我来说并不明显的第二部分是在您的项目中添加一个 httpHandler 以根据 http 请求提供字体文件。

<system.web>
   <httpHandlers>
     <add verb="*" path="*.eot" type="System.Web.StaticFileHandler" />
   </httpHandlers>    
</system.web>

并非所有浏览器都支持 eot 字体。 关联

于 2014-07-06T10:25:23.277 回答
0

当我使用 ELMAH 捕获这些异常时,根据我的经验,100% 的时间是因为我的部署没有部署字体文件。您应该仔细检查服务器上是否存在该文件。

于 2012-05-09T22:34:57.243 回答