我有一个项目,要求我的url在路径上有圆点。例如,我可能有一个URL,例如www.example.com/people/michael.phelps

带有点的url会生成404。我的路由是好的。如果我传入michaelphelps,没有点,那么一切正常。如果我加一个点,就会得到404错误。示例站点运行在Windows 7和IIS8 Express上。URLScan未运行。

我尝试在我的web.config中添加以下内容:

<security>
  <requestFiltering allowDoubleEscaping="true"/>
</security>

不幸的是,这并没有什么不同。我刚刚收到一个404.0未找到错误。

这是一个MVC4项目,但我不认为这是相关的。我的路由工作得很好,我所期望的参数都在那里,直到它们包含一个点。

我需要配置什么才能在我的URL中有圆点?


当前回答

我通过编辑我的站点的HTTP处理程序得到了这个工作。对于我的需要,这很好地解决了我的问题。

我只是添加了一个新的HTTP处理程序,用于查找特定的路径条件。如果请求匹配,则正确地将其发送到. net进行处理。我更喜欢这个解决方案,URLRewrite黑客或启用RAMMFAR。

例如,要让. net处理URL www.example.com/people/michael.phelps,请在站点的web中添加以下行。系统内配置。webServer / handlers元素:

<add name="ApiURIs-ISAPI-Integrated-4.0"
     path="/people/*"
     verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS"
     type="System.Web.Handlers.TransferRequestHandler"
     preCondition="integratedMode,runtimeVersionv4.0" />

Edit

还有其他帖子建议这个问题的解决方案是RAMMFAR或RunAllManagedModulesForAllRequests。启用此选项将为所有请求启用所有托管模块。这意味着静态文件,如图像、pdf文件和其他任何文件将在不需要时由. net处理。除非你有特定的情况,否则最好不要使用这个选项。

其他回答

在一些闲逛后,我发现relaxedUrlToFileSystemMapping根本不为我工作,在我的情况下工作的是将RAMMFAR设置为true,同样适用于(.net 4.0 + mvc3)和(.net 4.5 + mvc4)。

<system.webserver>
    <modules runAllManagedModulesForAllRequests="true">

当设置RAMMFAR为true时,Hanselman发布了关于RAMMFAR和性能的帖子

根据保留URI而不使用查询字符串的重要性,也可以将带有圆点的值作为查询字符串的一部分,而不是URI。

例如,www.example.com/people?name=michael.phelps将工作,无需更改任何设置或任何东西。

您失去了拥有干净URI的优雅性,但此解决方案不需要更改或添加任何设置或处理程序。

你可能想要考虑使用破折号而不是句号。

在Pro ASP MVC 3框架中,他们建议创建友好的url:

避免使用符号、代码和字符序列。如果你想说句话 分隔符使用破折号(/my-great-article)。下划线不友好, url编码的空格是奇怪的(/my+great+article)或恶心的 (/ % 20大% 20篇文章)。

它还提到url应该易于阅读和更改。也许考虑使用破折号而不是点的原因也来自同一本书:

不要为HTML页面使用文件扩展名。Aspx或.mvc),但要将它们用于特殊的文件类型(.jpg, .pdf, .zip等)。如果您适当地设置了MIME类型,Web浏览器并不关心文件扩展名,但是人们仍然希望PDF文件以.pdf结尾

因此,虽然句号对人类来说仍然是可读的(尽管在我看来,它的可读性不如破折号),但它可能仍然有点令人困惑/误导,这取决于句号之后的内容。如果有人姓zip呢?那么URL将是/John.zip而不是/John-zip,这甚至会误导编写应用程序的开发人员。

对于那些只在一个网页上有这个的人来说,超级简单的答案。编辑actionlink并在它的末尾加上+“/”。

  @Html.ActionLink("Edit", "Edit", new { id = item.name + "/" }) |

这是我在iis7.5和. net Framework 4.5环境中发现的404错误的最佳解决方案,并且不使用:runAllManagedModulesForAllRequests="true"。

我关注了这个帖子:https://forums.asp.net/t/2070064.aspx?Web+API+2+URL+routing+404+error+on+IIS+7+5+IIS+Express+works+fine,我已经修改了我的网站。现在MVC web应用程序在iis7.5和. net Framework 4.5环境下工作得很好。