我有一个项目,要求我的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中有圆点?
是否可以更改URL结构?
为了我的工作,我尝试了一条路线
url: "Download/{fileName}"
但它对任何有。在里面。
我把路线换成了
routes.MapRoute(
name: "Download",
url: "{fileName}/Download",
defaults: new { controller = "Home", action = "Download", }
);
现在我可以输入localhost:xxxxx/File1.doc/Download,它可以正常工作。
我在视图中的助手也注意到了这一点
@Html.ActionLink("click here", "Download", new { fileName = "File1.doc"})
也会生成到localhost:xxxxx/File1.doc/Download格式的链接。
也许你可以在路由的末尾放一个不需要的单词,比如“/view”或action,这样你的属性就可以以/结尾的/结尾,比如/mike.smith/view
我在这个问题上卡了很长一段时间,遵循了所有不同的补救措施,但都没有效果。
我注意到,当在包含点[.]的URL末尾添加正斜杠[/]时。),它没有抛出404错误,而且它确实工作了。
我最终解决了这个问题,使用一个URL重写器,如IIS URL重写,以观察一个特定的模式,并附加训练斜杠。
我的URL看起来是这样的:/Contact/~firstname。所以我的模式很简单:/Contact/~(.*[^/])$
我从Scott Forsyth那里得到了这个想法,见下面的链接:
http://weblogs.asp.net/owscott/handing-mvc-paths-with-dots-in-the-path
MVC 5.0解决方案。
许多建议的答案似乎在MVC 5.0中不起作用。
由于上一节中的404点问题可以通过结尾的斜杠来解决,下面是我使用的小技巧,干净而简单。
同时在视图中保持一个方便的占位符:
@Html.ActionLink("Change your Town", "Manage", "GeoData", new { id = User.Identity.Name }, null)
添加一点jquery/javascript来完成工作:
<script>
$('a:contains("Change your Town")').on("click", function (event) {
event.preventDefault();
window.location.href = '@Url.Action("Manage", "GeoData", new { id = User.Identity.Name })' + "/";
});</script>
请注意后面的斜杠,它负责更改
http://localhost:51003/GeoData/Manage/user@foo.com
成
http://localhost:51003/GeoData/Manage/user@foo.com/