创建路径时发生错误

时间:2018-03-28 12:25:20

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

我尝试在.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(字符串模板,字符串名称,IInlineConstraintResolver constraintResolver,RouteValueDictionary默认值,IDictionary约束,RouteValueDictionary dataTokens)\ r \ n ArgumentException:路径模板中有一个不完整的参数。检查每个' {'角色有匹配的'}'字符。 \ r \ n参数名称:routeTemplate

4 个答案:

答案 0 :(得分:3)

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

错误

[Route(“ api / users / {userId / photos”)]

在userId之后缺少结尾的“}” ,这导致了此问题。

工作

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

希望对其他人有帮助:)

答案 1 :(得分:1)

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?}"
);  
这是有效的!

答案 2 :(得分:1)

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

[HttpGet("{id:int")]  

答案 3 :(得分:0)

如错误消息中所述,路由模板中有一个迷路{使其无效

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