我在我的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());
有一次,这个WAS在运行IIS 7.5的开发服务器上运行我不得不摆弄IIS处理程序映射,但它最终有效,解析了legaxy asp urls并正确提取了查询字符串参数。
但是,似乎如果我完全触摸IIS设置,处理程序映射设置会以某种方式恢复。我现在可以更长时间地让处理程序正确映射,我发誓,如果我再次使用它,我会把它写下来。