将 MVC 支持添加到 WebForms 项目后,不会加载 aspx 页面
After adding MVC support to a WebForms project, aspx pages don´t load
我开始在 .net framework 4 上完成一个 Web 表单项目。我们想开始使用 MVC 中的新功能,并开始慢慢迁移旧的遗留功能,我们希望利用有 MVC 和 aspx。这最初是 asp.net 网络表单项目。
我从添加 MVC 开始。由于项目目标框架 4,我安装了 MVC 4.0.40804。这个时候升级框架会很麻烦,需要重构很多代码。
至此,组件安装成功,项目顺利。我启动它是为了检查 aspx 文件是否仍然有效。和繁荣。他们没有。我收到 404 错误。默认页面是 Account/Login.aspx 但已更改为 Account/Login?ReturnUrl=%2fAccount%2fLogin.aspx.
所以我开始检查并找到 this article from Scott Hanselman 并尝试配置我的 RouteConfig 文件,但没有任何效果。现在我的文件看起来像这样。
public static void RegisterRoutes(RouteCollection routes)
{
//THIS IS ADDED BY VS
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//THIS I ADDED AT FIRST UPDATE
routes.IgnoreRoute("Account/{myWebForms}.aspx/{*pathInfo}");
routes.IgnoreRoute("{myWebForms}.aspx/{*pathInfo}");
//THIS I ADDED SECOND
routes.IgnoreRoute("Account/{*pathInfo}");
//THEN I ADDED THIS
routes.IgnoreRoute("Account/Login.aspx");
//THEN I ADDED THIS IN THE FINAL ATTEMPT
routes.MapPageRoute(
"login",
"Account/{myWebForm}",
"~/Account/Login.aspx"
);
//THIS IS DEFAULT CONFIG AND WAS HERE FROM THE BEGGINING
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
}
None 的尝试改变了行为,任何配置都按预期加载了 account.Login.aspx webForm,每次我 运行 调试时都会显示相同的错误。
如何配置?
另一件事,我使用 MVC Movies for MVC 4 起始指南代码指导自己。所以检查版本和文件。我还没有创建 bundleConfig 或 webapiconfig 类,只有 RouteConfig。
更新
这是 Web 配置文件中的 和 标签。除了这些标签之外,还有连接字符串配置、应用程序设置和 WCF 服务设置未包含在内。
最后有一个绑定到 Newtonsoft.json 依赖项的标签。
<system.web>
<httpRuntime requestValidationMode="2.0"/>
<compilation debug="true" targetFramework="4.0"/>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880"/>
</authentication>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
<!-- <sessionState cookieless="AutoDetect" mode="StateServer" /> -->
</system.web>
尽管路由到 login.aspx,但身份验证将基于 URL。看起来表单身份验证不允许您在未经身份验证的情况下访问 Acount/Login。
尝试将以下内容添加到您的 web.config:
<configuration>
<location path="Account/Login">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
</configuration>
这可能有用。
编辑:
作为解释,标记中的 * 只是表示允许任何人访问此页面,无论身份验证状态如何。如果您要为预先存在的 Web 表单页面添加任何其他路由,如果它们应该是匿名的,您可能还需要为它们添加标签。
如果您将任何 MVC 页面 (.cshtml) 添加到您的应用程序,您应该能够在您的操作上使用 [Authorize] 和 [AllowAnonymous] 属性来控制对这些页面的身份验证,但为 Web 表单自定义路由您的网络配置中需要位置标签。
我开始在 .net framework 4 上完成一个 Web 表单项目。我们想开始使用 MVC 中的新功能,并开始慢慢迁移旧的遗留功能,我们希望利用有 MVC 和 aspx。这最初是 asp.net 网络表单项目。
我从添加 MVC 开始。由于项目目标框架 4,我安装了 MVC 4.0.40804。这个时候升级框架会很麻烦,需要重构很多代码。
至此,组件安装成功,项目顺利。我启动它是为了检查 aspx 文件是否仍然有效。和繁荣。他们没有。我收到 404 错误。默认页面是 Account/Login.aspx 但已更改为 Account/Login?ReturnUrl=%2fAccount%2fLogin.aspx.
所以我开始检查并找到 this article from Scott Hanselman 并尝试配置我的 RouteConfig 文件,但没有任何效果。现在我的文件看起来像这样。
public static void RegisterRoutes(RouteCollection routes)
{
//THIS IS ADDED BY VS
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
//THIS I ADDED AT FIRST UPDATE
routes.IgnoreRoute("Account/{myWebForms}.aspx/{*pathInfo}");
routes.IgnoreRoute("{myWebForms}.aspx/{*pathInfo}");
//THIS I ADDED SECOND
routes.IgnoreRoute("Account/{*pathInfo}");
//THEN I ADDED THIS
routes.IgnoreRoute("Account/Login.aspx");
//THEN I ADDED THIS IN THE FINAL ATTEMPT
routes.MapPageRoute(
"login",
"Account/{myWebForm}",
"~/Account/Login.aspx"
);
//THIS IS DEFAULT CONFIG AND WAS HERE FROM THE BEGGINING
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new
{
controller = "Home",
action = "Index",
id = UrlParameter.Optional
}
);
}
None 的尝试改变了行为,任何配置都按预期加载了 account.Login.aspx webForm,每次我 运行 调试时都会显示相同的错误。
如何配置?
另一件事,我使用 MVC Movies for MVC 4 起始指南代码指导自己。所以检查版本和文件。我还没有创建 bundleConfig 或 webapiconfig 类,只有 RouteConfig。
更新 这是 Web 配置文件中的 和 标签。除了这些标签之外,还有连接字符串配置、应用程序设置和 WCF 服务设置未包含在内。
最后有一个绑定到 Newtonsoft.json 依赖项的标签。
<system.web>
<httpRuntime requestValidationMode="2.0"/>
<compilation debug="true" targetFramework="4.0"/>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880"/>
</authentication>
<webServices>
<protocols>
<add name="HttpGet"/>
<add name="HttpPost"/>
</protocols>
</webServices>
<!-- <sessionState cookieless="AutoDetect" mode="StateServer" /> -->
</system.web>
尽管路由到 login.aspx,但身份验证将基于 URL。看起来表单身份验证不允许您在未经身份验证的情况下访问 Acount/Login。
尝试将以下内容添加到您的 web.config:
<configuration>
<location path="Account/Login">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
</configuration>
这可能有用。
编辑:
作为解释,标记中的 * 只是表示允许任何人访问此页面,无论身份验证状态如何。如果您要为预先存在的 Web 表单页面添加任何其他路由,如果它们应该是匿名的,您可能还需要为它们添加标签。
如果您将任何 MVC 页面 (.cshtml) 添加到您的应用程序,您应该能够在您的操作上使用 [Authorize] 和 [AllowAnonymous] 属性来控制对这些页面的身份验证,但为 Web 表单自定义路由您的网络配置中需要位置标签。