После добавления поддержки MVC в проект WebForms страницы aspx не загружаются - PullRequest
0 голосов
/ 30 августа 2018

Я начинаю работать над проектом веб-форм, выполненным на .net framework 4. Мы хотим начать работать с новыми функциями в MVC и начать медленно переносить старые унаследованные функции, и мы хотим воспользоваться преимуществами возможности наличия MVC. рядом с aspx. Это изначально был и проект веб-форм asp.net.

Я начал с добавления MVC. так как проект нацелен на фреймворк 4, я установил MVC 4.0.40804. Обновление фреймворка в это время может быть громоздким и потребовать много кода для рефакторинга.

Пока что установка компонентов прошла хорошо, и проект скомпилирован. Я начал это, чтобы проверить, что файлы aspx все еще работают и бум. они не Я получаю ошибку 404. страница по умолчанию - Account / Login.aspx , но она изменяется на Account / Login? ReturnUrl =% 2fAccount% 2fLogin.aspx .

enter image description here

Итак, я начал проверять и нашел эту статью от Скотта Хансельмана и попытался настроить мой файл 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 Movies для 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>

1 Ответ

0 голосов
/ 04 сентября 2018

Несмотря на то, что аутентификация будет перенаправлена ​​на login.aspx, она будет основываться на URL. Похоже, что проверка подлинности с помощью форм не позволяет вам получить доступ к учетной записи / входу в систему без проверки подлинности.

Попробуйте добавить следующее в ваш файл web.config:

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

Это может сработать.

EDIT:

В качестве пояснения, * в теге просто означает, что любой может получить доступ к этой странице, независимо от статуса аутентификации. Если вы добавляете какие-либо другие маршруты для уже существующих страниц веб-форм, вам также может понадобиться добавить теги для них, если они должны быть анонимными.

Если вы добавите какие-либо страницы MVC (.cshtml) в свое приложение, вы сможете использовать атрибуты [Authorize] и [AllowAnonymous] в своих действиях для управления аутентификацией на них, но для них потребуются пользовательские маршруты для веб-форм. теги местоположения в вашей веб-конфигурации.

...