ASP.NET MVC Маршрутизация для запуска на HTML-странице - PullRequest
14 голосов
/ 27 апреля 2009

Я использую IIS 6. Думаю, моя проблема в том, что я не знаю, как маршрутизировать на неконтроллер, используя маршруты. MapRoute.

У меня есть URL-адрес, например example.com, и я хочу, чтобы он обслуживал страницу index.htm и не использовал MVC. как мне это настроить? В IIS у меня есть index.htm в качестве начального документа, а мой global.asax имеет стандартную маршрутизацию «по умолчанию», где он вызывает Home / Index.

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
        );

    }

Я добавил это:

    protected void Application_BeginRequest(object sender, EventArgs e)
    {
        if (Context.Request.FilePath == "/") Context.RewritePath("index.htm");
    }

это работает. Но разве это лучшее решение?

Ответы [ 5 ]

19 голосов
/ 01 сентября 2009

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

public class DocumentationController : Controller
{
    public ActionResult Index()
    {
        return Redirect( Url.Content( "~/index.htm" ) );
    }

}

Обратите внимание, что я использую эту документацию веб-службы REST на основе MVC. Если вы перейдете в корень сайта, вы получите документацию службы вместо какого-либо метода веб-службы по умолчанию.

6 голосов
/ 03 июля 2014

Настройте маршрутизацию asp.net, чтобы игнорировать root ("/") requests и позволить IIS's "Default Document" ISAPI-фильтру обслуживать статический index.htm файл

Добавьте следующее к методу RegisterRoutes.

routes.IgnoreRoute("");
1 голос
/ 22 февраля 2016

Лучшее решение - удалить контроллер по умолчанию. Вы столкнулись с этой проблемой, потому что вы указываете как страницу по умолчанию, так и маршрут по умолчанию без каких-либо параметров.

Просто удалив controller = "Home" по умолчанию для маршрута, / больше не будет соответствовать маршруту и, поскольку никакой другой маршрут не будет удовлетворен, IIS будет искать документы по умолчанию.

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
        "Default",                                              // Route name
        "{controller}/{action}/{id}",                           // URL with parameters
        new { action = "Index", id = "" }                       // Parameter defaults
    );
}
0 голосов
/ 14 сентября 2009

IIS6 имеет несколько отличий от IIS7 в том, как ASP.NET работает с ним. Прочтите это сообщение в блоге от Phli Haack о том, как настроить этот параметр для использования с ASP.NET MVC. Удачи!

0 голосов
/ 27 апреля 2009

маршрутов. ИгнорироватьRoute?

Также см. Этот вопрос: Как игнорировать маршрут в формах asp.net url маршрутизация

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