Мне пришлось сделать несколько вещей, чтобы решить эту проблему. Во-первых, чтобы избавиться от ошибки 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"];