威廉,
我有在旧的mvc 1网站中也有类似的情况。但是,逻辑可能仍然适合。我有一些已知的页面和各种未知的页面来处理。在那个时候,我处理了它在动作用,而cludgy方法详述如下:
public ActionResult Index()
{
string routeval = (string)this.RouteData.Values["file"];
var dicT = new Dictionary<string, int>();
// oh deary me - hardcoded values
dicT.Add("algarve", 1);
dicT.Add("brazil", 5);
dicT.Add("colorado", 4);
dicT.Add("morocco", 2);
dicT.Add("thailand", 6);
// what, no test for culture/case :-)
if (dicT.ContainsKey(routeval))
{
var routeData = new RouteValueDictionary(
new
{
controller = "Property",
action = "Details",
id = dicT[routeval],
Lang = "en"
});
return RedirectToAction("Details", "Property", routeData);
}
else
{
return View();
}
}
[编辑] - 发现信息的这一另一个“有用”位从旧MVC1应用。您可以添加以下到您的基本控制器:
public class LegacyUrlRoute : RouteBase
{
// source: http://www.mikesdotnetting.com/Article/108/Handling-Legacy-URLs-with-ASP.NET-MVC
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("/villas/") || legacyUrl.EndsWith("asp"))
{
if (legacyUrl.Contains("/villas/"))
newUrl = "/en/home/Destinations";
else if (legacyUrl.EndsWith("asp"))
{
newUrl = "/en/home/index";
if (legacyUrl.Contains("about"))
newUrl = "/en/home/AboutUs";
if (legacyUrl.Contains("offers"))
newUrl = "/en/home/Offers";
if (legacyUrl.Contains("contact"))
newUrl = "/en/home/ContactUs";
if (legacyUrl.Contains("destinations"))
newUrl = "/en/home/destinations";
if (legacyUrl.Contains("faq"))
newUrl = "/en/home/Faq";
if (legacyUrl.Contains("terms"))
newUrl = "/en/home/Terms";
if (legacyUrl.Contains("privacy"))
newUrl = "/en/home/Privacy";
}
response.Status = status;
response.RedirectLocation = newUrl;
response.End();
}
return null;
}
public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
{
return null;
}
}
,然后换上新的路线在Global.asax文件:
routes.Add(new LegacyUrlRoute());
基本上,我“知道”,我一直在寻找一个途径值包含'文件'的参数沿www.url.com/somepage.asp?file=algarve
等行(这是如何旧的ASP经典网站的工作,我知道现在没有这个)。对于我想重定向的“已知”路线,我使用了RedirectToAction
的逻辑,其他所有内容都是通过默认的Index() View()
进行的。
正如我所说,cludgy,而不是我现在要做的(大约2。5年后),但它是一个例子,我'漂浮在',它实际上工作! :d
好运
威廉,很高兴这个工作对你 - 感谢“锣”;) – 2011-02-18 12:47:52