【问题标题】:How to make MVC route to a more user friendly url?如何使 MVC 路由到更用户友好的 url?
【发布时间】: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


【解决方案1】:

根据提供的slug(tweaking-asp.net-identity-to-add-first-and-last-name-as-username),我相信你的问题是由“asp.net”中的句号引起的。根据其他答案,似乎 IIS 认为您正在请求一个文件并寻找它,因为它没有找到它,它正在返回 404。

请尝试使用没有点的 slug,如果确实有效,那么可能就是这种情况,这是一个可能的解决方案:Dots in URL causes 404 with ASP.NET mvc and IIS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 2013-09-03
    • 2010-09-11
    • 2012-10-06
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多