自定义路由 ASP.NET MVC
Custom routing ASP.NET MVC
所以我想让我的 URL 看起来像这样:
example.com
、example.com/contact
、example.com/sign-up
、example.com/account
而不是默认的 MVC 方式,它看起来像:
example.com
、example.com/Home/Contact
、example.com/Account/SignUp
、example.com/Account/Account
所有 HomeController
视图都工作正常,但我的 AccountController
不工作。
去 example.com/account
时我收到一条错误消息:
The resource cannot be found.
这是我的 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
等却没有。
感谢任何帮助,谢谢!
P.S 这是我的文件夹结构:
> 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")]
最后:
RouteConfig.cs
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 }
);
}
AccountController.cs
[Route("Sign-Up")]
public ActionResult SignUp()
{
ViewBag.Message = "Your application description page.";
return View();
}
Result
所以我想让我的 URL 看起来像这样:
example.com
、example.com/contact
、example.com/sign-up
、example.com/account
而不是默认的 MVC 方式,它看起来像:
example.com
、example.com/Home/Contact
、example.com/Account/SignUp
、example.com/Account/Account
所有 HomeController
视图都工作正常,但我的 AccountController
不工作。
去 example.com/account
时我收到一条错误消息:
The resource cannot be found.
这是我的 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
等却没有。
感谢任何帮助,谢谢!
P.S 这是我的文件夹结构:
> 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")]
最后:
RouteConfig.cs
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 }
);
}
AccountController.cs
[Route("Sign-Up")]
public ActionResult SignUp()
{
ViewBag.Message = "Your application description page.";
return View();
}
Result