Эта проблема существует только в IIS5.1.Я нашел способ решения проблемы, но он не является удовлетворительным.Мне просто интересно, есть ли другие, немного менее очевидные решения.
Проблема в том, что у меня есть проект ASP.NET AJAX, интегрированный в решение ASP.NET MVC2.
У меня есть статическая функция на моей странице .aspx, которая помечена атрибутом WebMethod.Я называю это так:
window.PageMethods.set_path(window.pageURL);
window.PageMethods.EnableEditMode(function (result) {
if (result) {
$find(window.leftPaneID).expand(1);
$('#' + window.startEditButtonID).hide();
$('#' + window.finishEditButtonID).show();
}
});
В IIS5.1 это приводит к 404, потому что Global.asax неправильно отображает маршрут.
Поэтому я добавил эту строку: routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*\.aspx(/.*)?" });
Это было полезно, но не достаточно.Теперь я получаю 405 POST не допускается.Я немного почитал и обнаружил, что это из-за:
Extension: .* // Executable Path: %windir%\Microsoft.Net\Framework\v4.0.3031\aspnet_isapi.dll
Если я удалю эту строку в сопоставлениях конфигурации приложения IIS, мой PageMethod перестанет работать.Круто!
К сожалению, это полностью нарушает MVC-аспект веб-приложения - необходима перезапись URL.
К сожалению, методы PageMethods имеют то же расширение, что и действия MVC.Итак, я не уверен, что делать.
Я знаю, что прочитал и увидел, как некоторые люди используют WebServices для этого.Мы находимся на последнем этапе тестирования перед выпуском, и после разговора с моим боссом он не хочет идти по этому пути, поскольку нас беспокоит его сложность и необходимость повторного тестирования больше, чем хотелось бы.
Поэтому я ищу другие решения.Можно ли сделать что-то вроде:
routes.MapRoute(
"Dashboard.aspx/EnableEditMode",
"Dashboard.aspx/EnableEditMode"
);
, где я жестко кодирую ожидаемые методы страницы и обрабатываю их явно?Я знаю, что это некрасиво, но сейчас это будет просто.
Спасибо за чтение
РЕДАКТИРОВАТЬ: Решение состоит в том, чтобы перестать поддерживать IIS5, очевидно.:)