#asp.net-mvc #iis #asp-classic #iis-7.5 #asp.net-mvc-routing
#asp.net-mvc #iis #asp-classic #iis-7.5 #asp.net-mvc-routing
Вопрос:
Я создал пользовательский маршрутизатор в своем проекте MVC следующим образом:
public class Classic_ASP_Routes : RouteBase
{
public override RouteData GetRouteData(HttpContextBase httpContext)
{
const string status = "301 Moved Permanently";
var request = httpContext.Request;
var response = httpContext.Response;
var legacyUrl = request.Url.ToString();
var newUrl = "";
if (legacyUrl.Contains("eventdetail.asp"))
{
// grab the ID from the query string
int id = int.Parse(legacyUrl.Split('=')[1]);
newUrl = "/event/" id;
}
else if(legacyUrl.Contains("addeent.asp"))
{
newUrl = "/Calendar/Add-Event";
}
if (newUrl.Length > 0)
{
response.Status = status;
response.RedirectLocation = newUrl;
response.End();
}
return null;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
return null;
}
}
Затем включил это в мой routes.config следующим образом:
routes.Add("ClassicASP", new Classic_ASP_Routes());
И одно время это работало на сервере разработки под управлением IIS 7.5, мне приходилось возиться с сопоставлениями обработчиков IIS, но в конечном итоге это сработало, проанализировав URL-адреса legaxy asp и корректно извлекая параметры строки запроса.
Но, увы, кажется, что если я вообще коснусь настроек IIS, настройка сопоставления обработчика каким-то образом изменится. Теперь я больше не могу корректно отображать обработчик, клянусь, я запишу это, если он снова заработает.
Комментарии:
1. Вам лучше использовать модуль перезаписи URL IIS, чем пытаться сделать это в MVC
2. @John Не показано, это то, что мне нужно посмотреть один из параметров, чтобы создать новый URL, возможно ли это при перезаписи url
3. Я не совсем уверен, что вы имеете в виду. Правила перезаписи URL-адресов принимают переменные, например, если у вас есть страница с подробными сведениями
http://mysite/article.asp?articleid=n
, вы можете создать одно правило, которое переписывает это какhttp://mysite/article/n
— вам не нужно отдельное правило для каждого значения ‘n’4. Нет, я имею в виду, что новые URL-адреса оптимизированы для seo, поэтому будут включать город, штат, название
5. Передаются ли city, state и title как значения querystring на ваших устаревших страницах или они поступают откуда-то еще?