我有一个带有表单模式身份验证的
Asp.net应用程序
<authentication mode="Forms">
<forms loginUrl="Login.aspx" />
</authentication>
我还创建了一个支持Ajax的Web服务,以支持页面中的“投票”功能.
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="VoteServiceAspNetAjaxBehavior">
<enableWebScript />
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
multipleSiteBindingsEnabled="true" />
<services>
<service name="VoteService">
<endpoint address="" behaviorConfiguration="VoteServiceAspNetAjaxBehavior"
binding="webHttpBinding" contract="VoteService" />
</service>
</services>
在服务实现中,我需要获取asp身份以确定谁在投票…
[OperationContract]
public int VoteForComment(Guid commentId)
{
string UserName = ServiceSecurityContext.Current.PrimaryIdentity.Name;
//...
}
但即使登录到asp应用程序后,ServiceSecurityContext.Current也为null.
是否可以配置Web服务以便它可以共享asp身份?
或者,是否有可能以另一种方式找出当前用户?
编辑结果非常简单,aspNetCompatabilityEnabled =“true”意味着Web服务可以访问Asp.Net中可用的所有正常状态,我只需要使用System.Web命名空间….
System.Web.HttpContext.Current.User.Identity.Name
最佳答案 我最好的选择是在web.config中使用模拟.
<identity impersonate="true"/>
<authentication mode="Forms" />
这将为您提供用户在httpContext和当前线程中提供的名称.
WindowsPrincipal winPrincipal =(WindowsPrincipal)Thread.CurrentPrincipal();
希望这可以帮助
Rauts