2017-03-27 36 views
0

编辑

即使更正了路线以匹配下面的操作,404错误仍然存​​在。如何使MVC路线更加用户友好的网址?

EDIT 2

我想要访问的网址中有一个.我认为这是造成问题,因为另一篇文章的网址没有一个和正常工作。我如何对此进行网址编码?


我通常与/site/contoller/action/param类型的URL

为我的博客网站我想,虽然不同的东西完全罚款。

下面是我的博客文章的一个现有链接的例子:

/Article/tweaking-asp.net-identity-to-add-first-and-last-name-as-username

我有索引视图上的文章控制器接受PARAM称为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?

+4

你的路线期望'id',然后是'slug'。看起来你打算只通过'slug'。尝试将路由配置中的url更改为:“article/{slug}” – maccettura

+1

您还应该避免使用“catch-all”('*')。如果您需要将斜线作为子弹的一部分捕获,那也是唯一必要的。 –

+2

记住路线是按先进先出顺序进行评估的。确保您的路线在任何可能发生冲突的通用路线之前列出。另外,我认为'/ {id}'部分应该被移除以获得你想要的URL。 –

回答

1

基于提供的slug(tweaking-asp.net-identity-to-add-first-and-last-name-as-username),我相信你的问题是由“asp.net” 。基于其他的答案,似乎IIS认为你正在请求一个文件,它会寻找它,因为它找不到它,它返回一个404。在这种情况下,如果确实有效,那很可能是这种情况,这里有一个可能的解决方案:Dots in URL causes 404 with ASP.NET mvc and IIS