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
);
}
Ответ 4
routes.IgnoreRoute?
Также см. этот вопрос: Как игнорировать маршрут в маршрутизации URL-адресов asp.net
Ответ 5
IIS6 имеет несколько отличий от IIS7 в том, как ASP.NET работает с ним. Проверьте это сообщение в блоге от Phli Haack о том, как настроить эту настройку для использования с ASP.NET MVC. Удачи!