ASP.NET MVC Маршрутизация начинается с html-страницы

Я использую 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");
    }

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

Ответ 1

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

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

}

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

Ответ 2

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

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

routes.IgnoreRoute("");

Ответ 3

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

Просто удалив 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
    );
}

Ответ 5

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