【问题标题】:MVC ignore parameters in filesMVC 忽略文件中的参数
【发布时间】:2016-09-02 21:46:03
【问题描述】:

您的服务器中有一个静态文件,在我们的例子中是一个图像 https://signtul.com/content/img/signature-boundary-08972bce-d646-483d-a436-d8ceea7ab034.png

此文件在 Microsoft OWA 中使用。如果由于某种原因 Outlook 无法获取文件,它会使用重试计数再次尝试。

OWA 在请求中添加了一个参数,所以它尝试使用这样的 url

https://signtul.com/content/img/signature-boundary-08972bce-d646-483d-a436-d8ceea7ab034.png&retrycount=2

不幸的是,OWA 添加了 &retryCount= 而不是 ?retryCount=,因为这使得 MVC 事物成为一个不同的文件,并且用户收到 404。

那么.. 有什么方法可以忽略静态文件/图像的附加参数?

【问题讨论】:

  • 你能像“.png”一样在最后加上问号吗?

标签: asp.net-mvc asp.net-mvc-4 iis


【解决方案1】:

问题在于,由于您的查询字符串格式不正确,IIS 将在 ASP.NET(或 MVC)甚至有机会干预之前阻塞它。

通常,MVC 根本不处理静态内容,出于性能原因,最好将该任务留给 IIS。解决此问题的最简单方法是使用IIS rewrite module 来确保将URL 重写为可用的(使用?)。您可以制定一条规则来非常轻松地处理多种文件类型。以下示例适用于 .png.jpg.gif.js.css 文件 - 您可以根据需要添加其他扩展名。

<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="Rewrite static content with URL querystring starting with &">
          <match url="^(.+?(?:\.png|\.jpg|\.gif|\.js|\.css))&amp;(.+?)$"/>
          <action type="Rewrite" appendQueryString="false" url="{R:1}?{R:2}"/>
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

基本上,上面查找任何上述扩展名,后跟一个&符号和任何其他文本(可能是查询字符串)。只有在这种情况下,它才会捕获包含扩展名的 URL 路径和查询字符串(忽略 & 号)。然后它在将 URL 传递给其处理程序之前使用问号而不是 & 符号重建 URL。

请注意,正则表达式将忽略正确指定的查询字符串,因此该规则仅适用于格式错误的查询字符串。

【讨论】:

    【解决方案2】:

    我看到你的问题有两种解决方案

    1. 在所有文件名后面加上“?”到底是signature-boundary-08972bce-d646-483d-a436-d8ceea7ab034.png?

    2. 我会创建路由来捕获所有“/content/img/signature-boundary-*”并将输入参数作为字符串获取,因为您希望是 png 或任何其他文件名,您可以编写某种清理所有垃圾。当我从搜索引擎得到很多错误的参数时,我实际上遇到了类似的问题(因为在我的情况下是无效的共享内容,所以这是一个可能的解决方法,因为我无法控制这个输入

    【讨论】:

    • 我宁愿一个通用的解决方案,内容中的所有图像,而不是针对每个图像。
    • @RicardoPolo 您可以使用任何文件类型 ..pdf、png、jpg、csv 等来做到这一点。
    • 我的意思是您的解决方案特定于一个文件。我想要一个适用于内容文件夹中每个文件的解决方案。我不想更改文件名,我们为每个文件创建一个路由。
    【解决方案3】:

    我不确定它是否能解决问题,因为我没有使用 OWA 的经验。

    您可以尝试在所有图像的末尾添加一个渣查询字符串,例如:

    https://signtul.com/content/img/signature-boundary-08972bce-d646-483d-a436-d8ceea7ab034.png?x=0

    我希望后续请求看起来像:

    https://signtul.com/content/img/signature-boundary-08972bce-d646-483d-a436-d8ceea7ab034.png?x=0&retrycount=2

    在这种情况下,它应该可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-23
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-20
      相关资源
      最近更新 更多