2017-03-27 45 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