Используя пользовательский профиль провайдера в ASP.net MVC?
В настоящее время я пытаюсь внедрить поставщика профилей для моего сайта уже несколько дней, и мне трудно над ним работать, я программист php, и я недавно перешел на asp.net
Я использую Linq для SQL и следуйте этому учебнику http://www.codeproject.com/KB/aspnet/LINQCustomProfileProvider.aspx.
причина, по которой я использую свою собственную, потому что у меня другая структура, чем у любого по умолчанию в asp.net. Данные профиля находятся внутри моей пользовательской таблицы.
Компиляция была в порядке, вход в систему был в порядке.
но я пытался
<% CMSProfile profile = HttpContext.Current.Profile as CMSProfile;%>
<%= profile.NickName %>
это не сработает, и я получу исключение System.NullReferenceException... так как я могу автоматически получить свой профиль в HTTPCONtext, чтобы я мог легко вызывать каждый раз.
Если вам нужно больше данных, я могу предоставить.
Большое спасибо.
Web.config:
<roleManager enabled="false" defaultProvider="CMSRoleProvider">
<providers>
<clear />
<add name="CMSRoleProvider" type="P014.ProviderClass.CMSRoleProvider" connectionStringName="P014ConnectionString" applicationName="/" />
</providers>
</roleManager>
2 ответа
Как вы зарегистрировали провайдера в web.config? Вам не нужно создавать экземпляр поставщика самостоятельно, это должно быть сделано приложением при запуске. Если вы дадите больше информации, я смогу помочь.
РЕДАКТИРОВАТЬ: Вот мой web.config, может быть, это поможет вам.
<profile defaultProvider="SWIntranetProfile" enabled="true">
<providers>
<clear/>
<add name="SWIntranetProfile" type="SWIntranetProfile"/>
</providers>
<properties>
<clear/>
<!-- SID is really LOGON_USER -->
<add name="SID" allowAnonymous="false" type="System.String" readOnly="true"/>
<add name="PersonID" allowAnonymous="false" type="System.Int32" readOnly="true"/>
<add name="EmailAddress" allowAnonymous="false" type="System.String" readOnly="true"/>
<add name="Position" allowAnonymous="false" type="System.String" readOnly="true"/>
<add name="Name" allowAnonymous="false" type="System.String" readOnly="true"/>
<add name="FirstName" allowAnonymous="false" type="System.String" readOnly="true"/>
<add name="LastName" allowAnonymous="false" type="System.String" readOnly="true"/>
<add name="ImageName" allowAnonymous="false" type="System.String" readOnly="true"/>
<add name="PhoneExt" allowAnonymous="false" type="System.String" readOnly="true"/>
<add name="LastIP" allowAnonymous="false" type="System.String" readOnly="false"/>
<add name="IntranetTheme" allowAnonymous="false" type="System.String" readOnly="false"/>
<add name="UnionID" allowAnonymous="false" type="System.Int32" readOnly="true"/>
<add name="UnionName" allowAnonymous="false" type="System.String" readOnly="true"/>
<add name="OfficeID" allowAnonymous="false" type="System.Int32" readOnly="true"/>
</properties>
</profile>
Я заметил, что автор статьи не дал пример кода для привязки профилировщика или Workflow к HttpContext.
Вы написали свой собственный класс, чтобы сделать это? Если да, правильно ли вы настроили это в файле web.config?
Если вы используете IIS7, вам также необходимо зарегистрировать свой IHttpModule в разделе webServer файла web.config.
РЕДАКТИРОВАТЬ
Чтобы иметь возможность запустить фрагмент кода, который вы показали, вам нужно поместить свой собственный Profiler в HttpContext.
Вы можете сделать это двумя способами, либо на основе запроса, либо при запуске приложения.
Для каждого запроса вам потребуется создать класс, реализующий IHttpModule, и зарегистрировать его в файле web.config.
Для запуска приложения вам необходимо прикрепить ваш CMSProfile к HttpContext.Current в методе Application_OnStart.
Это пример приложения, прикрепленного к статье, которую вы разместили. Вы загружали и проверяли пример приложения?