Azure上的Url.Content

时间:2011-02-22 10:18:19

标签: asp.net-mvc asp.net-mvc-2 azure

我有一个ASP.NET MVC 2应用程序,其页面包含指向pdf文件的链接

<a href="<%= Url.Content("~/Downloads/test1.pdf") %>">test1</a>

下载目录位于MVCApplication1 / Downloads

这在本地和ISS上工作正常,但返回上传到Azure时找不到的页面。

3 个答案:

答案 0 :(得分:2)

检查HTML中发出的路径。它可能与Azure数据中心/群集相关,如果您的客户端位于Azure之外,则对您的客户端毫无意义。

如果您看到“http://RD1204900029029/Downloads/test1.pdf”之类的内容,那就是您的问题。您需要使用应用程序逻辑发出实际路径,以说明负载均衡器代表您所做的一些魔术。

使用请求本身提供的URL信息的最佳方式。我无论如何都不是ASP.NET高手,因此可能有一种更简洁的方法(类似于Url.Content),但这样可以使用

尝试

HttpContext.Current.Request.Url.Host

所以

<%
    var host = System.Web.HttpContext.Current.Request.Url.Host;
%>

<a href="<%= host + "/Downloads/test1.pdf" %>">test1</a>

答案 1 :(得分:2)

在pdf属性中的visualstudio中,必须将构建操作更改为内容并复制到输出目录,以便始终复制以使用Azure

答案 2 :(得分:1)

这是猜测......

但我认为Azure IIS实例可能不包含PDF作为已知的MIME类型。

要调整此尝试,请将mime类型添加到应用的web.config文件中: http://blogs.iis.net/bills/archive/2008/03/25/how-to-add-mime-types-with-iis7-web-config.aspx

如果这仍然不起作用,那么可以考虑:

  • 更改文件扩展名
  • 将PDF移动到Blob存储 - 理论上,从Blob存储直接提供此静态内容应该更高效
  • 为您的应用添加动态代理以获取此文件(不太理想!)