【发布时间】:2017-08-13 06:03:15
【问题描述】:
背景
出于 SEO 目的,同一页面不能有两个 url,否则 Google 会将其中一个页面视为“重复内容”,这将导致 google 降低该页面在搜索引擎结果中的排名。
问题
在 Asp.Net Core 中,当使用基于属性的例程时:
public class ExampleController: Controller {
[HttpGet]
[Route("/example/")]
public IActionResult Index() {
return View();
}
}
此路由返回 index.cshtml 页面以响应对 /example/ AND /example 的 URL 请求。但是,我只希望它响应我明确指定的路由,即/example/。如果收到/example 的请求,我不希望此操作方法响应,系统应该改为 404。
问题
我需要在全局级别执行什么操作来强制路由引擎严格遵守指定的路由?
【问题讨论】:
-
你为什么要这个?这是每个网络服务器都使用的一般规则,尾部斜杠对路由无关紧要。通常 www.example.com 的路径通常是
/所以它经常被规范化为一个斜杠。 -
如果你真的想要这个,你可以添加一个中间件,如果缺少斜杠,它总是转发到带有斜杠的 url,但这可能是你的通用解决方案?
-
我可以添加中间件,但这很麻烦,因为大多数 url 不应该以斜杠结尾,因为大多数将指定视图而不是视图目录。我真正想要的是让 Asp.Net Core 尊重我在基于属性的路由中指定的内容,并且我愿意在必要时重写路由引擎的那部分以获得它。
-
我刚刚发现这个问题已经在 GitHub 上报告了,我在那里添加了信息。感兴趣的朋友:github.com/aspnet/Routing/issues/380
标签: url routing asp.net-core seo