首页 > 解决方案 > 将 MVC 支持添加到 WebForms 项目后,aspx 页面不加载

问题描述

我开始在 .net 框架 4 上完成的 Web 表单项目中工作。我们想开始在 MVC 中工作新功能并开始慢慢迁移旧的旧功能,我们希望利用 MVC 和 aspx 的能力。这最初是和 asp.net 网络表单项目。

我从添加 MVC 开始。由于项目针对框架 4,我安装了 MVC 4.0.40804。此时升级框架可能很麻烦,需要重构大量代码。

到目前为止,组件安装良好,项目完成。我开始检查 aspx 文件是否仍然有效。和繁荣。他们没有。我收到 404 错误。默认页面是Account/Login.aspx但它已更改为Account/Login?ReturnUrl=%2fAccount%2fLogin.aspx

在此处输入图像描述

所以我开始检查并找到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
            }
        );
    }

没有任何尝试改变行为,任何配置都按预期加载了 account.Login.aspx webForm,并且每次我在调试中运行时都会显示相同的错误。

我该如何配置它?

另一件事,我用 MVC Movies for MVC 4 起始指南代码指导自己。所以检查版本和文件。我还没有创建 bundleConfig 或 webapiconfig 类,只有 RouteConfig。

更新 这里是来自网络配置文件的和标签。除了这些标签之外,还有连接字符串、应用程序设置和 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>

标签: c#asp.netasp.net-mvcwebformsasp.net-mvc-routing

解决方案


尽管被路由到 login.aspx,但身份验证将基于 URL。看起来表单身份验证不允许您在未经身份验证的情况下访问帐户/登录。

尝试将以下内容添加到您的 web.config 中:

<configuration>
    <location path="Account/Login">
        <system.web>
          <authorization>
            <allow users="*" />
          </authorization>
        </system.web>
      </location>
</configuration>

那可能行得通。

编辑:

作为解释,标签中的 * 仅表示允许任何人访问此页面,无论身份验证状态如何。如果您要为预先存在的 Web 表单页面添加任何其他路由,如果它们应该是匿名的,您可能还需要为这些路由添加标签。

如果您将任何 MVC 页面 (.cshtml) 添加到您的应用程序,您应该能够在您的操作中使用 [Authorize] 和 [AllowAnonymous] 属性来控制对这些页面的身份验证,但是 Web 表单的自定义路由将需要位置标记你的网络配置。


推荐阅读