[英]Custom routing ASP.NET MVC
所以我想讓我的 URL 看起來像這樣:
example.com
、 example.com/contact
/ example.com/sign-up
、 example.com/account
example.com/contact
、 example.com/sign-up
/ example.com/account
而不是默認的 MVC 方式,它看起來像:
example.com
, example.com/Home/Contact
/ example.com/Account/SignUp
example.com
, example.com/Home/Contact
/ example.com/Account/SignUp
example.com
, example.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.