将MVC支持添加到WebForms项目后,aspx页面不会加载

时间:2018-08-30 18:10:08

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

我正在从事在.net Framework 4上完成的Web窗体项目中的工作。我们希望开始在MVC中工作新功能,并开始缓慢迁移旧的旧功能,我们力图充分利用拥有MVC的功能与aspx一起。这最初是asp.net Web窗体项目。

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

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

enter image description here

因此,我开始检查并找到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
            }
        );
    }

任何尝试都没有改变行为,任何配置都会加载该帐户.Login.aspx WebForm符合预期,每次在调试中运行时都会显示相同的错误

如何配置?

另一件事,我以MVC 4的MVC电影入门指南为自己进行了指导。因此,请检查版本和文件。我尚未创建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>

1 个答案:

答案 0 :(得分: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表单的自定义路由您的网络配置中的位置标记。