如果url以Admin开头并包含X参数,则为默认MVC路由

时间:2016-06-15 13:39:24

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

我有一个角度应用程序,由于功能性,我已将其拆分为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个以上参数的网址,例如www.mysite.com/admin/page/12,则会返回我的Home / Index.cshtml。

如果“管理”一词位于域名之后,无论URL中有多少参数,我如何才能返回管理员视图?

2 个答案:

答案 0 :(得分: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" });

答案 1 :(得分:0)

[路线("〜/ 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