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

C# 如果url以Admin开头并包含X个参数,则为默认MVC路由,c#,asp.net,angularjs,asp.net-mvc,asp.net-core,C#,Asp.net,Angularjs,Asp.net Mvc,Asp.net Core,我有一个angular应用程序,由于其功能,我将其分为2个部分。在这里,我们将调用应用程序默认和管理 在我的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.MapRou

我有一个angular应用程序,由于其功能,我将其分为2个部分。在这里,我们将调用应用程序默认和管理

在我的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视图

// 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" });
});
为了实现这一点,我添加了我的
AdminController

[Authorize]
public class AdminController : Controller
{
    [Route("~/Admin/{id?}")]
    public IActionResult Index()
    {
        return View();
    }
}
但如果我尝试加载一个包含2个以上参数的url,例如www.mysite.com/admin/page/12,则会返回我的主页/Index.cshtml

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

[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更改代码,如下所示:

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" });