像mvc中的“home.asp”重定向的网址

时间:2016-08-26 13:15:54

标签: c# asp.net asp.net-mvc asp.net-mvc-4 redirect

我需要重建一个网站(旧的他们使用经典的ASP,但他们现在想把它变成MVC 4)并且他们不想改变网址。例如,如果搜索屏幕的网址是blabla.com/search.asp,他们希望保持这样。但是mvc不允许制作像“search.asp”这样的网址。我想保留这样的URL,但渲染搜索视图。我需要一个接一个地做这个还是有一个动态的方式呢?

例如

requested url = "blabla.com/string variable" 
if variable.Substring(variable.Length - 4) == ".asp";
return View("variable.Substring(0, (variable.Length - 4))")

注意:语法完全错了,我知道。我只是想解释一下情况......

注2:他们想要这个因为“SEO”的东西。他们不想失去收视率。任何不改变谷歌任何东西的方法,他们都会接受这种方法。

2 个答案:

答案 0 :(得分:3)

你需要两件事。

  1. 为* .asp
  2. 定义路线
  3. 为* .asp
  4. 添加处理程序

    <强> RouteConfig

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    
        routes.MapRoute(
            name: "DefaultAsp",
            url: "{controller}/{action}.asp/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
    

    处理程序(WebConfig)

    (这个需要插入/system.webServer/handlers

      <add name="AspFileHandler" path="*.asp" verb="GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    

    这样做你也可以使用.asp使用MVC构建所有URL,这意味着如果你有一个调用另一个View的锚点,那么该视图将具有带.asp后缀的普通mvc URL。

    注意

    这是通用的,您只需要添加此行一次。 Home / Index显示只是默认的Controller和Action。

    注2

    忘了解释处理程序。

    你需要它,因为IIS认为你要求一个ASP文件,它会尝试访问该页面并返回错误,因为它不存在。

    使用此处理程序,您允许应用程序自己处理这些页面。

答案 1 :(得分:1)

MVC确实允许您编写包含扩展名的Route,并将其指向特定的Controller:

在RouteConfig.cs中:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapRoute("Test", "test.asp", new {controller = "Test", action = "test" });
}

然后,在TestController.cs中:

public class TestController : Controller
{
    public ActionResult Test()
    {
        var obj = new Foo();
        //Do some processing
        return View(obj);
    }
}

通过这种方式,您可以毫无问题地访问http://www.foo.com/test.asp,并维护客户所需的.asp