MVC忽略文件中的参数

时间:2016-05-08 02:58:38

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

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

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

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

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

不幸的是,OWA添加了&retryCount=而不是?retryCount=,因为这会使MVC内容成为另一个文件而用户会收到404.

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

3 个答案:

答案 0 :(得分:5)

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

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

<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。

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

答案 1 :(得分:0)

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

  1. 使用&#34;?&#34;附加所有文件名最后是签名边界-08972bce-d646-483d-a436-d8ceea7ab034.png?

  2. 我会创建路线来捕捉所有&#34; / content / img / signature-boundary - *&#34;并获取输入参数作为字符串,因为你希望是png或任何其他文件名,你可以写一些所有垃圾的清理。当我从搜索引擎获得大量错误参数时,我实际上遇到了类似的问题(因为我的情况下无效的共享内容是#的东西)所以这是一个可能的修复,因为我无法控制此输入

    < / LI>

答案 2 :(得分:0)

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

你可以尝试在所有图像的末尾添加一个slag querystring,如:

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

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