【问题标题】:After adding MVC support to a WebForms project, aspx pages don´t load将 MVC 支持添加到 WebForms 项目后,aspx 页面不加载
【发布时间】:2019-02-05 18:07:50
【问题描述】:

我开始在 .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

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

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

如何配置它?

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

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

【问题讨论】:

  • 听起来您的路由已经与MapPageRoute 正确。你能提供web.config文件的sn-p吗?真正的问题在于匿名用户身份验证会触发重定向到使用表单身份验证而不是您自己的登录页面的错误登录 URL。
  • OK... 在这个我们项目中使用会员提供者。网络配置很长。你能指定需要哪些标签吗?我会尽快发布
  • 我希望您显示配置文件的表单身份验证、用户和/或角色授权部分,这些部分与允许/拒绝用户请求有关。简单的成员资格提供程序意味着使用内置授权,如果请求的 URL 未经授权,则执行重定向。
  • @TetsuyaYamamoto 我将标签包含在您要求的设置中。除了登录表单 url 之后的 ~ 之外,我真的没有看到明显的错误。我不在 routeConfig Ignore 语句中使用它。

标签: c# asp.net asp.net-mvc webforms asp.net-mvc-routing


【解决方案1】:

尽管被路由到 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 表单的自定义路由将需要您的网络配置中的位置标签。

【讨论】:

  • 很高兴听到这个消息!我意识到我的回答没有提供太多解释,因此我对其进行了编辑以提供进一步的清晰度。
  • 我忘了站在位置路径属性上,我必须输入“Account/Login.aspx”才能使其工作,否则它会引发资源未找到错误。到目前为止一切顺利。
  • 但是,无法通过这种方式到达控制器。我创建了一个测试控制器,它会抛出 404 错误。
猜你喜欢
  • 2014-04-07
  • 2014-10-12
  • 2014-07-08
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
相关资源
最近更新 更多