【发布时间】:2017-03-28 02:37:56
【问题描述】:
编辑
即使在更正路由以匹配以下操作后,404 错误仍然存在。
编辑 2
我试图访问的 URL 中有一个 .,我认为这会导致问题,因为另一篇文章的 URL 没有并且工作正常。我如何对它进行 url 编码?
我通常对/site/contoller/action/param 输入网址完全没问题
对于我的博客网站,我想要一些不同的东西。
以下是我的一篇博客文章的现有链接示例:
/Article/tweaking-asp.net-identity-to-add-first-and-last-name-as-username
我在文章控制器上的索引视图接受名为slug 的参数:
public ActionResult Index(string slug)
{
ApplicationDbContext Context = new ApplicationDbContext();
var Article = Context.Articles.FirstOrDefault(x => x.Slug == slug);
// get and list articles and build the ViewModel
return View(Model);
}
我更新了我的RouteConfig.cs 来处理这个问题,但我似乎搞砸了,因为当我尝试导航到具有此配置的文章时收到 HTTP404 错误。
routes.MapRoute(
name: "Articles",
url: "Article/{slug}",
defaults: new { controller = "Article", action = "Index", slug = UrlParameter.Optional }
);
我怎样才能正确路由到这种类型的 URL?
【问题讨论】:
-
您的路线需要
id,然后是slug。您似乎只打算通过slug。尝试将路由配置中的 url 更改为:“article/{slug}” -
您还应该避免“包罗万象”(
*)。仅当您还需要捕获斜线作为 slug 的一部分时,才需要这样做。 -
请记住,路由是按 FIFO 顺序评估的。确保您的路线列在任何可能发生冲突的通用路线之前。另外,我认为应该删除
/{id}部分以获得您想要的 URL。 -
您可能应该考虑在您的服务器上使用 URL Rewrite 来完成此操作。
-
如果您查看堆栈溢出的 URL,您会发现他们的页面使用了类似的格式。不要在 slug 中包含任何点 (
.),因为它会被解释为文件扩展名并可能导致路由问题。
标签: c# asp.net-mvc asp.net-mvc-5