我认为我对MVC3有一个奇怪的问题。 我的css文件包含IE的@ font-face,如下所示:
@font-face {
font-family: AvantGardeNormal;
src: url('fontname.eot');
}
它在本地(在我的机器上)工作正常,但是当我发布到服务器(Azure)时,我收到了这个错误:(就像它试图像控制器中的动作一样访问字体文件) 错误(System.Web.HttpException):未找到路径'/Content/fontname.eot'的控制器或未实现IController。
当然,字体无法加载。
感谢。
答案 0 :(得分:2)
为每个字体文件将“Build Action”设置为“Content”,否则将不会部署它们。
答案 1 :(得分:1)
有几种方法可以验证参考,内容或数据文件是否属于部署的一部分。这里描述了大多数常见内容:
首先您可以检查引用或静态内容的属性,以查看“将本地复制设置为”真“。
第二,您可以解压缩CSPKG文件(如果需要,将其重命名为zip),然后解压缩CSPKG中的CSSX文件。解压缩CSSX文件后,您可以看到可用的内容,因为这是部署后应用程序可用的内容。
第三,如果您可以通过RDP访问Azure VM,则只需使用您的RD凭据登录并查找驱动器E:和文件夹Approot \文件夹,以获取所有参考和静态内容。
答案 2 :(得分:0)
根据我的经验,当我使用ELMAH捕获这些异常时,100%的时间是因为我的部署没有部署字体文件。您应该仔细检查服务器上是否存在该文件。
答案 3 :(得分: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字体。 link