Asp.Net Core MVC: невозможно настроить маршрутизацию с использованием областей

Lord of the Goo спросил: 28 марта 2018 в 03:05 в: asp.net-core

Я пытаюсь настроить маршруты 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 ответ

Есть решение
Lord of the Goo ответил: 29 марта 2018 в 01:19

Нашел его (и очень разочарован).

Еще раз читая документацию по маршрутизации, есть четкое утверждение: "обычную и атрибутированную маршрутизацию нельзя смешивать". В этих случаях выигрывает последний.

Я ошибся, используя атрибут HttpGet.

Редактировать

Я сделал некоторую работу, чтобы преодолеть это ограничение. Я не знаю эквивалентного простого решения, предоставляемого платформой.

Я реализовал простой метод расширения RouteModuleAttribute и IRouteBuilder, которые взаимодействуют, чтобы обеспечить запрошенное поведение.

Полное решение, которое выходит за рамки для этого потока, доступно на GitHub.