используя пользовательский профиль провайдера в ASP.net MVC? - PullRequest
0 голосов
/ 10 ноября 2009

Я сейчас пытаюсь внедрить провайдер профиля для моего сайта уже несколько дней, и мне тяжело над ним работать, я программист 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 ]

2 голосов
/ 10 ноября 2009

Как вы зарегистрировали провайдера в 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>
1 голос
/ 10 ноября 2009

Я заметил, что автор статьи не привел пример кода для привязки профилировщика или Workflow к HttpContext.

Вы написали свой собственный класс для этого? Если да, правильно ли вы настроили это в файле web.config?

Если вы используете IIS7, вам также необходимо зарегистрировать свой IHttpModule в разделе webServer файла web.config.

EDIT

Чтобы иметь возможность запустить фрагмент кода, который вы показываете, вам нужно поместить свой собственный Профилировщик в HttpContext.

Это можно сделать двумя способами: для каждого запроса или при запуске приложения.

Для каждого запроса вам потребуется создать класс, реализующий IHttpModule, и зарегистрировать его в web.config.

Для запуска приложения вам необходимо прикрепить ваш CMSProfile к HttpContext.Current в методе Application_OnStart.

Это пример приложения, прикрепленного к статье, которую вы разместили. Вы скачали и проверили пример приложения?

...