Хотите маршрутизировать к базовому контроллеру, если указанный контроллер не найден

У меня есть базовый контроллер, который обеспечивает базовые реализации некоторых действий:

[Route("api/[controller]")]
public class BaseAppController : Controller
{...

У меня есть несколько контроллеров, которые происходят от этого, и они вызываются с использованием маршрутизации от базового контроллера. Они добавляют различные функции. Например:

public class SomeController : BaseAppController
{
... more stuff ...
}

Теперь, когда запрос идет к

http://appurl/Some/MyAction

очевидно, он использует MyAction, который находится либо в SomeController, либо в BaseAppController.

Чего я хочу добиться, так это того, что если я отправлю запрос на:

http://appurl/NonExistent/MyAction

Я хочу, чтобы он определил, что NonExistentController не существует, и вместо этого вернулся к использованию BaseAppController.

Любые указатели будут приветствоваться.


person cristi71000    schedule 09.01.2018    source источник


Ответы (2)


Вы можете использовать FilterAttribute для перенаправления ответа с кодом состояния 404 Not Found на другой URL-адрес/маршрут.

Создав фильтр, зарегистрируйте его в FilterConfig.cs.

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
        filters.Add(new MyNotFoundAttribute());
    }
}
person garret    schedule 09.01.2018

Вы можете поймать несуществующие контроллеры или методы через Webapiconfig.cs в папке App_start.

Добавьте приведенный ниже код в Webapiconfig.cs.

config.Routes.MapHttpRoute(
name: "ResourceNotFound",
routeTemplate: "{*uri}",
defaults: new { controller = "BaseApp", uri = RouteParameter.Optional });

Это должно перехватывать все не найденные запросы API и отправлять их в BaseAppContoller.

person Iniamudhan    schedule 09.01.2018