Asp.net mvc MVC忽略文件中的参数

Asp.net mvc MVC忽略文件中的参数,asp.net-mvc,asp.net-mvc-4,iis,Asp.net Mvc,Asp.net Mvc 4,Iis,您的服务器中有一个静态文件,在本例中是一个映像 此文件在Microsoft OWA中使用。如果由于某种原因outlook无法获取该文件,它将使用重试计数重试 OWA在请求中添加了一个参数,所以它会尝试使用如下url 不幸的是,OWA添加了&retryCount=,而不是?retryCount=,因为这使MVC成为一个不同的文件,用户收到404 所以。。有没有办法忽略静态文件/图像的附加参数?我认为有两种方法可以解决您的问题 在所有文件名的末尾加上“?”,使其成为signature-bound

您的服务器中有一个静态文件,在本例中是一个映像

此文件在Microsoft OWA中使用。如果由于某种原因outlook无法获取该文件,它将使用重试计数重试

OWA在请求中添加了一个参数,所以它会尝试使用如下url

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


所以。。有没有办法忽略静态文件/图像的附加参数?

我认为有两种方法可以解决您的问题

  • 在所有文件名的末尾加上“?”,使其成为signature-boundary-08972bce-d646-483d-a436-d8ceea7ab034.png?

  • 我将创建一个路由来捕获所有“/content/img/signature boundary-*”并以字符串形式获取输入参数,因为您希望是png或任何其他文件名,所以可以编写某种类型的垃圾清理程序。事实上,当我从搜索引擎中得到很多错误的参数时,我也遇到了类似的问题(因为在我的例子中,共享内容无效,它与#有关),所以这是一个可能的解决方案,因为我无法控制此输入


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

    通常,MVC根本不处理静态内容,最好是出于性能原因将该任务留给IIS。解决此问题的最简单方法是使用确保URL被重写为可用的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


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

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

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

    我希望随后的请求如下所示:


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

    您能在结尾添加问号吗,如“.png?”我更喜欢一个通用的解决方案,所有图像都包含在内容中,而不是针对每个图像。@RicardoPolo您可以对任何文件类型执行此操作。..pdf、png、jpg、csv等。我的意思是您的解决方案针对一个文件。我想要一个适用于内容文件夹中每个文件的解决方案。我不想更改文件名,而是为每个文件创建一个路由。