Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 将web表单站点转换为MVC_Asp.net_Asp.net Mvc_Redirect - Fatal编程技术网

Asp.net 将web表单站点转换为MVC

Asp.net 将web表单站点转换为MVC,asp.net,asp.net-mvc,redirect,Asp.net,Asp.net Mvc,Redirect,这似乎是一个常见的问题,但我在任何地方都找不到答案 首先是一些背景。我有一个带有ASPX web表单的ASP.NET网站。当浏览器请求时,IIS提供/somefolder/default.aspx的内容。请求还接收/somefolder/default.aspx 现在回答问题。我想逐步将网站转换为MVC和Razor。需要做什么才能让MVC处理对的请求,并将获取301重定向到的请求 编辑 这里有一些额外的信息可以澄清我上面的问题 过去,每当我退出一个ASPX页面时,我都会在其代码中放置Respon

这似乎是一个常见的问题,但我在任何地方都找不到答案

首先是一些背景。我有一个带有ASPX web表单的ASP.NET网站。当浏览器请求时,IIS提供/somefolder/default.aspx的内容。请求还接收/somefolder/default.aspx

现在回答问题。我想逐步将网站转换为MVC和Razor。需要做什么才能让MVC处理对的请求,并将获取301重定向到的请求

编辑

这里有一些额外的信息可以澄清我上面的问题

过去,每当我退出一个ASPX页面时,我都会在其代码中放置Response.RedirectPermanent以重定向到替换页面。当default.aspx被MVC/Razor取代时,这种做法是否应该继续下去?或者如果发生了一些不同的情况,例如删除default.aspx并使用路由来处理编辑请求?

有一个简单的解决方案。在Route.Config中,添加routes.IgnoreRoute{resource}.aspx/{*pathInfo};:

在Global.asax.cs中添加以下内容:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    var requestUrl = Request.Url.ToString().ToLower();

    //Default.aspx is converted to "Home/Index"
    if (requestUrl.Contains("/default.aspx"))
    {
        Context.Response.StatusCode = 301;
        Context.Response.Redirect("/Home/Index");
    }
}  
如果参数被传递到页面,您可能需要解析requestUrl


我建议阅读以下内容:这将有助于构建更好的解决方案。

以下内容可能是您想要做的:这是一篇好文章@CAbbott,但我不知道它在哪里解决了我的问题。您可以阅读这篇文章:这是一个公认的答案。@Afzalugh:我对MVC及其路由机制不熟悉,所以我需要一些时间来尝试你提到的东西。不过看起来很有希望!实现基本routeconfig,然后将过滤器添加到项目中。。这将是一个更简洁的解决方案…请原谅我的无知,但是如果被请求并且/somefolder/default.aspx尚未转换为MVC,使用此解决方案会发生什么?IIS和客户端是否会进入无限循环,浏览器请求/somefolder/default.aspx,IIS说要重定向到/somefolder/default.aspx,浏览器再次请求/somefolder/default.aspx,IIS再次重定向,等等?@Theophilus-否,如果页面存在,它将传递注释{id}.aspx,。有一个问题我没有注意到,如果文件不存在,它将进入无限循环。我已经编辑了我的答案。经过很长时间的延迟,我可以继续这个问题。我做了您建议的更改,但在Global.asax.cs中除外。requestUrl.Contains方法的内容已更改为/somefolder/,因为我关心的是子文件夹级别而不是根目录级别的重定向。当我尝试浏览到/somefolder/时,Firefox报告页面没有正确重定向。
protected void Application_BeginRequest(object sender, EventArgs e)
{
    var requestUrl = Request.Url.ToString().ToLower();

    //Default.aspx is converted to "Home/Index"
    if (requestUrl.Contains("/default.aspx"))
    {
        Context.Response.StatusCode = 301;
        Context.Response.Redirect("/Home/Index");
    }
}