Asp.Net Core MVC:无法使用区域配置路由

时间:2018-04-21 16:45:47

标签: asp.net-core asp.net-core-mvc asp.net-core-2.0

我尝试使用区域配置Mvc路线。

这是我尝试的最简单版本。

演示控制器

using System;
using Microsoft.AspNetCore.Mvc;
namespace SampleApp.Controllers
{
    [Area("Demo")]
    public class DemoController: Controller
    {
        [HttpGet("hello")]
        public string Hello() => "Hello Guest";
    }
}

Startup.cs

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseMvc(routes =>
        {
            routes.MapAreaRoute(
                name: "demo_area",
                areaName: "Demo",
                template: "super/demo/{controller}/{action}",
                defaults: new { controller = "Demo", action = "Hello" });

        });
    }

我还实现了一个Debug控制器来检查返回以下路由定义的路由器:

{
    "action": "Hello",
    "controller": "Demo",
    "dataTokens": null,
    "defaults": null,
    "name": null,
    "template": "hello" // -> Get http://localhost:5000/hello
}

1 个答案:

答案 0 :(得分:0)

找到它(非常失望)。

再次阅读路由文档有一个明确的声明:«传统和基于属性的路由不能混合»。在这些情况下,后者获胜。

我使用HttpGet属性时错了。

修改

我做了一些工作来克服这个限制。我不知道框架提供的等效简单解决方案。

我已经实现了一个简单的RouteModuleAttributeIRouteBuilder扩展方法,它们可以互动以提供请求的行为。

此线程超出范围的完整解决方案可在GitHub上找到。