【问题标题】:Default MVC route if url begins with Admin and contains X parameters如果 url 以 Admin 开头并包含 X 参数,则默认 MVC 路由
【发布时间】:2016-06-15 13:39:23
【问题描述】:

我有一个 Angular 应用程序,由于功能原因,我已将其分成 2 个。在这里,我们将应用程序称为 Default 和 Admin。

在我的 ASP.NET MVC 网站中,我定义了这个路由,它将捕获所有 URL 并加载 Home/Index.cshtml 视图。

// Mvc routes
app.UseMvc(builder =>
{
    // default goes to Home, and angular will deal with client side routing     
    builder.MapRoute(
        name: "default",
        template: "{*url}",
        defaults: new { controller = "home", action = "index" });
});

现在,如果用户转到包含单词 admin 的 URL(例如 www.mysite.com/admin 或 www.mysite.com/admin/something),那么我想返回我的 Admin/Index.cshtml 视图.

为了完成这个,我添加了我的AdminController

[Authorize]
public class AdminController : Controller
{
    [Route("~/Admin/{id?}")]
    public IActionResult Index()
    {
        return View();
    }
}

但是,如果我尝试加载包含 2 个以上参数的 url,例如 www.mysite.com/admin/page/12 我的 Home/Index.cshtml 将被返回。

如果 Admin 一词在域名之后,无论 URL 中有多少参数,我如何才能返回我的 Admin 视图??

【问题讨论】:

    标签: c# asp.net angularjs asp.net-mvc asp.net-core


    【解决方案1】:

    如下修改你的代码:

    routes.MapRoute(
            name: "spa-fallback-admin",
            template: "admin/{*url}",
            defaults: new { controller = "Admin", action = "Index" });
    
    routes.MapRoute(
            name: "spa-fallback",
            template: "{*url}",
            defaults: new { controller = "Home", action = "Index" });
    

    【讨论】:

      【解决方案2】:

      [Route("~/Admin/{id?}")] 只是无法捕获 www.mysite.com/admin/page/12,因此它继续使用默认路由。您应该通过查询字符串传递参数,或者为每个参数组合添加不同的操作。

      [Route("~/Admin/")]
      public IActionResult Index(int? id, int page){}
      

      所以您可以使用 www.mysite.com/admin/?id=1&page=12

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        • 2017-10-08
        • 2014-10-01
        • 2021-01-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多