簡體   English   中英

具有一個固定動作的MVC路由和具有多個可選參數的控制器

[英]MVC routing with one fixed action and controllers with multiple optional parameters

基本上我有一個問題,我想在多個控制器中進行一個默認操作,並使用我的自定義URL的多個可選參數,如下所示:

www.mydomain.com/{controller name} / {v1} / {v2} / {v3} / {v4}

並且也不希望在url中使用動作名稱。 我在routeconfig.cs中有這個路由

routes.MapRoute(
    name: "Blog",
    url: "{controller}/{v1}/{v2}/{v3}/{v4}",
    defaults: new
    {
        controller = "Blog",
        action = "searchBlog",
        v1 = UrlParameter.Optional,
        v2 = UrlParameter.Optional,
        v3 = UrlParameter.Optional,
        v4 = UrlParameter.Optional
    });

routes.MapRoute(
    name: "Forum",
    url: "{controller}/{v1}/{v2}/{v3}/{v4}",
    defaults: new
    {
        controller = "Forum",
        action = "searchForum",
        v1 = UrlParameter.Optional,
        v2 = UrlParameter.Optional,
        v3 = UrlParameter.Optional,
        v4 = UrlParameter.Optional
    });

BlogController動作

public ActionResult searchBlog(string v1=null,string v2 = null, string  v3 = null, string v4 = null)
{
    // use optional parameters here
    return View("Index");
}

ForumController

public ActionResult searchForum(string v1=null,string v2 = null, string  v3 = null, string v4 = null)
{
    // use optional parameters here
    return View("Index");
}

我的動作用0,3和4參數命中,但在傳遞1或2參數時無法命中。

例如

  1. www.mydomain.com/{controller name} / {v1} / {v2}

  2. www.mydomain.com/{controller name} / {v1}

請幫助我/指導我,在我提到我的要求時,在MVC中使用路由的正確方法是什么。 我很感激你的寶貴時間。 提前致謝。

您必須通過修復每個控制器的路由來設置這樣的路由配置,否則將為上述類型的場景調用默認路由配置,路由將變為這樣。

www.mydomain.com/blog/{v1}/{v2}/{v3}/{v4}

此路由僅適用於博客控制器,因為我們已在此配置中修復了路由。

routes.MapRoute(
        name: "Blog",
        url: "blog/{v1}/{v2}/{v3}/{v4}",
        defaults: new
        {
            controller = "Blog",
            action = "searchBlog",
            v1 = UrlParameter.Optional,
            v2 = UrlParameter.Optional,
            v3 = UrlParameter.Optional,
            v4 = UrlParameter.Optional
        });

您必須為論壇的每個控制器手動執行此操作,結果路由僅適用於論壇控制器。

www.mydomain.com/forum/{v1}/{v2}/{v3}/{v4}

routes.MapRoute(
        name: "Forum",
        url: "forum/{v1}/{v2}/{v3}/{v4}",
        defaults: new
        {
            controller = "Forum",
            action = "searchForum",
            v1 = UrlParameter.Optional,
            v2 = UrlParameter.Optional,
            v3 = UrlParameter.Optional,
            v4 = UrlParameter.Optional
        });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM