簡體   English   中英

自定義路由 ASP.NET MVC

[英]Custom routing ASP.NET MVC

所以我想讓我的 URL 看起來像這樣:

example.comexample.com/contact / example.com/sign-upexample.com/account example.com/contactexample.com/sign-up / example.com/account

而不是默認的 MVC 方式,它看起來像:

example.comexample.com/Home/Contact / example.com/Account/SignUp example.comexample.com/Home/Contact / example.com/Account/SignUp example.comexample.com/Home/Contact / example.com/Account/SignUp / example.com/Account/Account

所有HomeController視圖都可以正常工作,但我的AccountController沒有。

轉到example.com/account我收到一條錯誤消息:

無法找到該資源。

這是我的RouteConfig

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.LowercaseUrls = true;

    routes.MapRoute(
        name: "Default",
        url: "{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );

    routes.MapRoute(
        name: "Account",
        url: "{action}/{id}",
        defaults: new { controller = "Account", action = "Account", id = UrlParameter.Optional }
    );
}

因為我想將Account/SignUp視圖顯示為/sign-up我在AccountController添加了一些自定義代碼。

// GET: Account
public ActionResult Account()
{
    return View();
}

// GET: Sign Up
[ActionName("Sign-Up")]
public ActionResult SignUp()
{
    return View("SignUp");
}

兩種格式/account/account/account給了我之前相同的錯誤。 但是/about/contact等沒有。

任何幫助表示贊賞,謝謝!

PS 這是我的文件夾結構:

> Views
-> Account
--> Account.cshtml
--> SignUp.cshtml
-> Home
--> About.cshtml
--> Contact.cshtml
--> Index.cshtml

也許自定義路由應該在默認路由之前

路線設置需要更加明確。

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.LowercaseUrls = true;

    routes.MapRoute(
        name: "Account",
        url: "account/{action}/{id}",
        defaults: new { controller = "Account", action = "Account", id = UrlParameter.Optional }
    );

    routes.MapRoute(
        name: "Default",
        url: "{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

添加 RouteConfig.cs:

routes.MapMvcAttributeRoutes();

將 AccountController.cs 作為屬性添加到 SignUp 方法

[Route("Sign-Up")]

最后:

路由配置文件

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.MapMvcAttributeRoutes();

    routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

賬戶控制器.cs

[Route("Sign-Up")]
public ActionResult SignUp()
{
  ViewBag.Message = "Your application description page.";

  return View();
}

結果

暫無
暫無

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

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