Ошибка 404.15 Строка запроса слишком длинная для доступа к учетной записи / имени пользователя - PullRequest
0 голосов
/ 08 января 2019

Я в процессе перевода приложения веб-форм ASP.Net из членства в личность. В целом все работает нормально, однако, когда я выхожу из системы, а затем пытаюсь перейти на страницу входа, я получаю ошибку 404.15 Строка запроса слишком длинная. Похоже, что-то постоянно добавляет URL-адрес возврата.

https://localhost:44350/Account/Login?ReturnUrl=%2FAccount%2FLogin%3FReturnUrl%3D%252FAccount%252FLogin%253FReturnUrl%253D%25252FAccount%25252FLogin%25253FReturnUrl%25253D%2525252FAccount%2525252FLogin%2525253FReturnUrl%2525253D%252525252FAccount%252525252FLogin%252525253FReturnUrl%252525253D%25252525252FAccount%25252525252FLogin%25252525253FReturnUrl%25252525253D%2525252525252FAccount%2525252525252FLogin%2525252525253FReturnUrl%2525252525253D%252525252525252FAccount%252525252525252FLogin%252525252525253FReturnUrl%252525252525253D%25252525252525252FAccount%25252525252525252FLogin%25252525252525253FReturnUrl%25252525252525253D%2525252525252525252FAccount%2525252525252525252FLogin%2525252525252525253FReturnUrl%2525252525252525253D%252525252525252525252FAccount%252525252525252525252FLogin%252525252525252525253FReturnUrl%252525252525252525253D%25252525252525252525252FAccount%25252525252525252525252FLogin%25252525252525252525253FReturnUrl%25252525252525252525253D%2525252525252525252525252FAccount%2525252525252525252525252FLogin%2525252525252525252525253FReturnUrl%2525252525252525252525253D%252525252525252525252525252FAccount%252525252525252525252525252FLogin%252525252525252525252525253FReturnUrl%252525252525252525252525253D%25252525252525252525252525252FAccount%25252525252525252525252525252FLogin%25252525252525252525252525253FReturnUrl%25252525252525252525252525253D%2525252525252525252525252525252FAccount%2525252525252525252525252525252FLogin%2525252525252525252525252525253FReturnUrl%2525252525252525252525252525253D%252525252525252525252525252525252FAccount%252525252525252525252525252525252FLogin%252525252525252525252525252525253FReturnUrl%252525252525252525252525252525253D%25252525252525252525252525252525252FAccount%25252525252525252525252525252525252FLogin%25252525252525252525252525252525253FReturnUrl%25252525252525252525252525252525253D%2525252525252525252525252525252525252FAccount%2525252525252525252525252525252525252FLogin%2525252525252525252525252525252525253FReturnUrl%2525252525252525252525252525252525253D%252525252525252525252525252525252525252FAccount%252525252525252525252525252525252525252FLogin

В папке «Учетная запись» у меня в web.config есть следующее

<?xml version="1.0"?>
<configuration>

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


    <system.web>
        <authorization>
            <deny users="?"/>
        </authorization>
    </system.web>

</configuration>

Когда я изменяю его, чтобы запретить доступ только для определенных страниц, а не для определенных страниц, я не вижу этой проблемы, однако в меню приложения начинает отображаться управление учетной записью для анонимных пользователей.

Кто-нибудь есть какие-либо предложения о том, как решить эту проблему?

1 Ответ

0 голосов
/ 14 февраля 2019

Мне пришлось сделать несколько вещей, чтобы решить эту проблему. Во-первых, чтобы избавиться от ошибки 404.15, я обновил файл web.config папки учетной записи, чтобы запретить доступ только к определенным страницам анонимным пользователям, а не запретил доступ к папке учетной записи анонимным пользователям и разрешил доступ к известным пользователям, где это необходимо. Это

<?xml version="1.0"?>
<configuration>

    <location path="Profile.aspx">
        <system.web>
            <authorization>
                <deny users="?"/>
            </authorization>
        </system.web>
    </location>

</configuration>

С этим изменением пункт меню PROFILE был показан анонимным пользователям, когда раньше этого не было. Чтобы преодолеть эту проблему, я теперь использую два разных меню, построенных из карт сайта. Один для анонимных пользователей, а другой для аутентифицированных пользователей.

Карта сайта для анонимных пользователей:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode title="ROOT" description="Root" roles="*">
        <siteMapNode title="HOME" description="Home" roles="*" url="~/" />
        <siteMapNode title="FORUM" description="Forum" roles="*" url="~/forum/" />
        <siteMapNode title="ABOUT" description="About" roles="*" url="~/About" />
    </siteMapNode>
</siteMap>

Карта сайта для аутентифицированных пользователей:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
    <siteMapNode title="ROOT" description="Root" roles="*">
        <siteMapNode title="HOME" description="Home" roles="*" url="~/" />
        <siteMapNode title="PROFILE" description="Profile" roles="*" url="~/Account/Profile" />
        <siteMapNode title="FORUM" description="Forum" roles="*" url="~/forum/" />
        <siteMapNode title="ABOUT" description="About" roles="*" url="~/About" />
        <siteMapNode title="ADMIN" description="Admin" roles="Administrator" url="~/Admin/Admin" />
    </siteMapNode>
</siteMap>

Оттуда я добавил обе карты сайта в файл web.config:

<system.web>
  <siteMap defaultProvider="MenuSiteMapProvider" enabled="true">
      <providers>
          <add name="MenuSiteMapProvider" description="Default Site Map Provider" type="System.Web.XmlSiteMapProvider" siteMapFile="Menu.sitemap" securityTrimmingEnabled="true" />
          <add name="MemberSiteMapProvider" description="Member Site Map Provider" type="System.Web.XmlSiteMapProvider" siteMapFile="Member.sitemap" securityTrimmingEnabled="true" />
      </providers>
  </siteMap>
</system.web>

Наконец, я обновил главную страницу сайта, чтобы использовать подходящее меню для анонимных или аутентифицированных пользователей:

Microsoft.Owin.Security.IAuthenticationManager authManager = Request.GetOwinContext().Authentication;
System.Security.Claims.ClaimsPrincipal authUser = authManager.User;
var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
var user = manager.FindById(authUser.Identity.GetUserId<long>());

MenuSiteMap.Provider = SiteMap.Providers[user == null ? "MenuSiteMapProvider" : "MemberSiteMapProvider"];
...