2016-10-21 30 views
0

我有一個動作鏈接,看起來像這樣生成URL沒有索引使用標籤助手

<a asp-controller="Complaint" asp-action="Index" asp-route-id="@complaint.Id"> 

然後,這將產生鏈接/投訴/索引/ be8cd27e-937f-4b7d-9004-e6894d1eebea

我想鏈接沒有索引。我試圖添加一個新的路線,但沒有成功。

routes.MapRoute(
    "defaultNoAction", 
    "{controller=Complaint}/{action=Index}/{id}"); 

我找不到任何文檔,看看是否有可能使用沒有索引的標記助手生成URL。也許這裏有人知道如何?

回答

1

用一個路線屬性來裝飾你的控制器的動作,這個屬性將會有你需要的路線。

[Route("Complaints/{id}")] 
public IActionResult Index(string id) 
{ 
    return View(); 
} 

這樣,您的控制器的操作就成爲默認的操作。請確保其他方法具有不同的簽名。

UPDATE

要建立在Startup類路由到正確定義的路由規則的順序是非常重要的。每ASP.NET Routing Documentation

路由集合按順序處理。請求通過URL匹配查找 路由集合中的匹配項。響應使用路由來生成 網址。

這意味着您的特定規則應該先行,並且默認路線模板應該像後來一樣遵循全部規則。在你的情況下,以下應該做的伎倆。

app.UseMvc(routes => 
{ 
    routes.MapRoute(
     name: "complaints", 
     template: "complaints/{id}", 
     defaults: new { controller = "Complaints", action = "Index" }); 

    routes.MapRoute(
     name: "default", 
     template: "{controller=Home}/{action=Index}/{id?}"); 
}); 
+0

這工作完美,爲什麼然後MapRoute不工作,屬性路由呢? –

+0

我猜想路線集合的順序是錯誤的。我剛剛更新了我的答案,以包括此路由方法。 – Ignas

+0

使用基於路由的方法的作品,但有一個意想不到的副作用。如果我添加一個新的動作,我們稱之爲'添加',然後導航到/ Complaints/Add /它將導航到/ Complaints/ –