Можно ли удалить папку из URL-адреса в ASP.NET MVC?

Можно ли удалить папку из URL-адреса, чтобы domain.com/mvc/page/ стал domain.com/page/ ?

Это приложение ASP.NET 4.5 MVC, работающее на Windows Server 2012 с IIS 7.5.


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

/mvc/ — это папка, содержащая веб-приложение MVC, в URL-адресе domain.com/mvc/page/whatever/else/


person Organic    schedule 08.06.2016    source источник


Ответы (2)


Спросите, я помню, URL-адрес в MVC зависит не от структуры папок, а от контроллера и маршрутизации. (Маршрутизация атрибутов)

 routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

. пожалуйста, проверьте эту ссылку. ASP Обзор маршрутизации .NET MVC (C#). Я думаю, вы можете найти больше объяснений там. Для одной ссылки можно использовать атрибут

[Route("orders/{id:int}/{orderCode?}")]
    public async Task<ActionResult> Order(int id, string orderCode = "")
    {
   ////
    }
person Tchaps    schedule 08.06.2016

Можно ли удалить папку из URL-адреса в ASP.NET MVC?

No.

MVC не использует файлы и папки для размещения своих конечных точек — он использует контроллеры и действия. Поэтому невозможно удалить «папку» из URL-адреса, поскольку в URL-адресе нет папок.

Однако MVC использует маршрутизацию .NET, что позволяет вам настроить URL-адреса так, как вы хотите. Итак, чтобы создать маршрут, соответствующий /page, как в вашем примере, вам нужно вставить маршрут, соответствующий этому URL-адресу, в ваш файл RouteConfig.cs.

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

        // Route to domain.com/page that calls an action named Page on the HomeController
        routes.MapRoute(
            name: "PageRoute",
            url: "page",
            defaults: new { controller = "Home", action = "Page" }
        );

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
person NightOwl888    schedule 08.06.2016
comment
Извините, я должен был уточнить свой вопрос, что /mvc/ — это папка, содержащая приложение MVC. Может ли RouteConfig.cs видеть и маршрутизировать часть URL-адреса /mvc/? Я предположил, что он может перенаправлять URL-адреса только внутри /mvc/..., если это имеет смысл. - person Organic; 08.06.2016
comment
Самое простое решение — удалить папку и разместить приложение в корне веб-сайта или переместить корень каталог веб-сайта через IIS. Но если обстоятельства диктуют необходимость сохранить подкаталог, вы можете использовать модуль перезаписи URL-адресов IIS на переписать корень каталог в подкаталог. Это не проблема, которую вы должны пытаться решить внутри приложения, потому что она существует полностью снаружи. - person NightOwl888; 08.06.2016
comment
Корнем веб-сайта является веб-сайт веб-форм. В качестве доказательства концепции я уже пытался переместить приложение mvc в корень веб-сайта, объединив web.config, скопировав mvc .dll в корневую папку bin и скопировав папку Views в корень. Я получил ошибку 404 при попытке загрузить URL-адрес mvc. - person Organic; 08.06.2016
comment
Я также уже пытался переписать URL-адрес в IIS, но не могу переписать папку приложения MVC в корень веб-сайта. Я писал об этом, но пока не помог: serverfault.com/questions/782482/ - person Organic; 08.06.2016
comment
Чтобы объединить сайты в один проект, необходимо убедиться, что все ссылки также добавлены (например, System.Web.Mvc), и должна быть создана сборка из исходного кода для обоих сайтов. Это, конечно, подразумевает, что вам нужно иметь исходный код (проект) каждого сайта. См. этот вопрос. - person NightOwl888; 08.06.2016
comment
Такое ощущение, что я хожу по кругу, потому что именно так все и началось :) Пытаясь объединить MVC в текущий веб-сайт. Мне не повезло следить за онлайн-ресурсами, так как большинство из них довольно старые или говорят о добавлении веб-форм в MVC или о том, как создать новое приложение, используя обе технологии. На самом деле я уже видел ссылку, которую вы предложили, которой 5 лет. Ситуация немного изменилась с VS2015 и более новым MVC. Кажется, я не могу найти решение, специфичное для нашей установки, пытающееся заставить 60 проектов веб-форм хорошо работать с одним MVC в корне веб-сайта. Кстати, у нас есть исходники для обоих сайтов. - person Organic; 08.06.2016
comment
Это не имеет абсолютно никакого отношения к Visual Studio, кроме того факта, что он наивно не поддерживает этот тип сценария. Вам необходимо вручную убедиться, что все ваши ссылки учтены и имеют правильную версию в файле проекта и во всех файлах web.config. Это кропотливо, но возможно. Просто не ожидайте помощи от Visual Studio или пошагового руководства, потому что существует очень много возможных состояний, в которых может находиться приложение, в зависимости от того, как продвигались его обновления с течением времени. - person NightOwl888; 08.06.2016
comment
Я предлагаю вам пройти одно из учебных пособий по интеграции и настроить демонстрацию с версией MVC и .NET Framework, на которую вы ориентируетесь. После того, как он заработает, сравните ссылки на сборки с вашим текущим проектом и добавьте/обновите их, чтобы они соответствовали рабочему проекту. Вам также нужно будет пройти web.config и Views/web.config и убедиться, что все версии компонентов синхронизированы с вашими ссылками на сборку. - person NightOwl888; 08.06.2016
comment
Давайте продолжим это обсуждение в чате. - person Organic; 08.06.2016