Карта Api маршрут до MVC маршрута - PullRequest
0 голосов
/ 24 октября 2018

Я хочу, чтобы мой FilesController был доступен как из / files / {action}, так и / api / files / {action}.Я пытался

routes.MapRoute(
    name: "Files",
    url: "api/Files/{action}/{id}",
    defaults: new { controller = "Files", id = UrlParameter.Optional }
);

, но это не работает.Я удалил WebApiConfig, поэтому в App_Start есть только MVC RouteConfig, но это не помогает.

Upd
код контроллера

public class FilesController : Controller {
    public ActionResult Index() {
        return new HttpStatusCodeResult(System.Net.HttpStatusCode.OK);
    }
}

URL запроса:
/ files / index -> OK (200)
/ api / files / index -> Not Found (404)

Upd # 2
Complete RouteConfig.cs

public class RouteConfig {
    public static void RegisterRoutes(RouteCollection routes) {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "FilesRoute",
            url: "Files/{action}/{id}",
            defaults: new { controller = "Files", id = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "Files",
            url: "api/Files/{action}/{id}",
            defaults: new { controller = "Files", id = UrlParameter.Optional }
        );
    }
}

1 Ответ

0 голосов
/ 24 октября 2018

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

Этот параметр сначала проверит URL, соответствует ли Files/{action}/{id}, если не используется api/Files/{action}/{id}

routes.MapRoute(
    name: "FilesRoute",
    url: "Files/{action}/{id}",
    defaults: new { controller = "Files", id = UrlParameter.Optional }
);

routes.MapRoute(
    name: "Files",
    url: "api/Files/{action}/{id}",
    defaults: new { controller = "Files", id = UrlParameter.Optional }
);

РЕДАКТИРОВАТЬ

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

/api/files/index => В противном случае, настройка найдет api контроллер и files действие.

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "FilesRoute",
            url: "Home/{action}/{id}",
            defaults: new { controller = "Home", id = UrlParameter.Optional }
        );

        routes.MapRoute(
            name: "Files",
            url: "api/Home/{action}/{id}",
            defaults: new { controller = "Home", id = UrlParameter.Optional }
        );


        routes.MapRoute(
             name: "Default",
             url: "{controller}/{action}/{id}",
             defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...