c# - 自定义路由 ASP.NET MVC

标签 c# asp.net-mvc asp.net-mvc-routing

所以我想让我的网址看起来与此类似:

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

而不是默认的 MVC 方式,如下所示:

example.comexample.com/Home/Contactexample.com/Account/SignUpexample.com/帐户/帐户

所有 HomeController View 都可以正常工作,但我的 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 View 显示为 /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 }
    );
}

关于c# - 自定义路由 ASP.NET MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59467536/

相关文章:

c# - 实体 VS 域模型 VS View 模型

c# - 为管理 Controller 添加路由

c# - 仅为一个 Controller 和该 Controller 的操作映射路由。其他路由设置保持可操作

c# - 用契约(Contract)验证传递的参数?

c# - 用于创建新调制解调器的 API

c# - begin/async tcplistener 是如何工作的

ajax - ActionLink 提交模型值

c# - 在 C# 中使用 LINQ 比较字典

asp.net - 如何在 ASP.NET MVC 中将 "active"类添加到 Html.ActionLink

asp.net-mvc - MVC 4 中的自定义路由