【问题标题】:An error occurred while creating a route创建路由时出错
【发布时间】:2018-09-07 03:19:54
【问题描述】:

我尝试向我的 .NET Core 项目添加一个区域,但我总是看到该错误:

RouteCreationException:创建名为“(我的区域名称)”的路线时出错

我的代码是:

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseBrowserLink();
        app.UseDeveloperExceptionPage();
        app.UseDatabaseErrorPage();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();

    app.UseAuthentication();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");

        routes.MapRoute(
            name: "custom",
            template: "{area:my area name}/{{controller=AdminHome}/{action=Index}/{id?}");
    });
}

并在配置服务中添加以下代码:

public void ConfigureServices(IServiceCollection services)
{
    //...

    services.AddRouting(); 

    //...
}

在控制器中我添加了:

[Area("My Area Name")]
public class AdminHomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

错误是:

RouteCreationException:创建名为“custom”和模板“{area:area name}/{{controller=Home}/{action=Index}/{id?}”的路由时出错。 \r\n Microsoft.AspNetCore.Routing.RouteBase..ctor(string template, string name, IInlineConstraintResolver constraintResolver, RouteValueDictionary defaults, IDictionary constraints, RouteValueDictionary dataTokens) \r\n ArgumentException: 路由模板中的参数不完整。检查每个 '{' 字符是否有匹配的 '}' 字符。 \r\n 参数名称:路由模板

【问题讨论】:

标签: c# asp.net-core asp.net-mvc-routing asp.net-mvc-areas


【解决方案1】:

如错误消息中所述,您在路由模板中有一个杂散的{ 使其无效

template: "{area:my area name}/{{controller=AdminHome}/{action=Index}/{id?}");
                               ^
                               |
                             here

您还需要重新排列路线的顺序以避免路线冲突。

app.UseMvc(routes => {
    routes.MapRoute(
        name: "custom",
        template: "{area:my area name}/{controller=AdminHome}/{action=Index}/{id?}");

    routes.MapRoute(
        name: "default",
        template: "{controller=Home}/{action=Index}/{id?}");
});

参考Areas in ASP.NET Core

【讨论】:

  • .net core 为程序员的软件开发提供了便利。但恰恰相反,经过 6 年的 MVC 编程,现在我无法在我的项目中添加区域。这很有趣
  • 我不敢相信我需要这个答案来解决这个问题。现在是晚上 9 点。今天是时候辞职了。不管怎么说,还是要谢谢你!我也错过了一个 },但我的第一个参数实际上在我的第二个路由属性中
【解决方案2】:

我正在使用 .Net Core 3.1 Web API 项目,问题出在控制器中,我们在控制器顶部指定了路由,下面是错误的 sn-p,然后是正确的:

错误

[Route("api/users/{userId/photos")]

我在 userId 之后错过了结束的“}”,这导致了这个问题。

工作

[Route("api/users/{userId}/photos")]

希望它可以帮助其他人:)

【讨论】:

    【解决方案3】:
    routes.MapRoute(
        name: "default",
        template: "{controller}/{action}/{id?}",
        defaults: new { controller = "Home", action = "Index", id = "id?" } 
    );
    routes.MapRoute(
        name: "persianredditacp",
        template: "{area}/{controller}/{action}/{id?}"
    );  
    

    成功了!

    【讨论】:

      【解决方案4】:

      很多时候,您对许多文件进行了多次更改,然后您在 .net 核心中的 Statup.cs 中进行搜索,结果却发现您在这样的新 Web api 方法上搞砸了一个属性

      [HttpGet("{id:int")]  
      

      【讨论】:

        猜你喜欢
        • 2021-07-09
        • 2019-12-01
        • 2020-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-05
        • 2011-10-06
        • 2020-10-11
        相关资源
        最近更新 更多