C# Sharepoint 2013基于表单的身份验证应用程序禁用错误403
我正在为SharePoint 2013开发一个提供商托管的应用程序 我在一个开发集合上调试这个应用程序,同时激活了Windows身份验证和FBA(基于表单的身份验证)。我可以使用我的Windows帐户或存储在SQL Server中的用户成功访问此集合。这两个帐户都是集合的管理员,对集合具有完全控制权 当我运行应用程序时,通常会出现一个窗口,询问我想要的身份验证模式。成功连接到用户(两者都在工作)后,我在clientContext.ExecuteQuery()上得到:“远程服务器返回错误:(403)禁止” 我应该明确指出,如果我禁用集合上的FBA,只允许Windows身份验证,它会像一个符咒一样工作 我做错了什么?有什么想法吗 感谢您的帮助C# Sharepoint 2013基于表单的身份验证应用程序禁用错误403,c#,authentication,sharepoint,forms-authentication,C#,Authentication,Sharepoint,Forms Authentication,我正在为SharePoint 2013开发一个提供商托管的应用程序 我在一个开发集合上调试这个应用程序,同时激活了Windows身份验证和FBA(基于表单的身份验证)。我可以使用我的Windows帐户或存储在SQL Server中的用户成功访问此集合。这两个帐户都是集合的管理员,对集合具有完全控制权 当我运行应用程序时,通常会出现一个窗口,询问我想要的身份验证模式。成功连接到用户(两者都在工作)后,我在clientContext.ExecuteQuery()上得到:“远程服务器返回错误:(403
public void Whatevermethod()
public void Whatevermethod()
{
using (SP.ClientContext clientContext = new SP.ClientContext("http://server/collection"))
{
//Configure the handler to set FBA mode
clientContext.ExecutingWebRequest += new EventHandler<SP.WebRequestEventArgs>(ctx_MixedAuthRequest);
//Use the default mode to execute under the credentials of this process
clientContext.AuthenticationMode = SP.ClientAuthenticationMode.Default;
clientContext.Credentials = System.Net.CredentialCache.DefaultCredentials;
clientContext.ExecuteQuery();
}
}
private void ctx_MixedAuthRequest(object sender, SP.WebRequestEventArgs e)
{
try
{
//Add the header that tells SharePoint to use FBA
e.WebRequestExecutor.RequestHeaders.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
}
catch (Exception ex)
{
string error = ex.Message;
}
}
{
使用(SP.ClientContext ClientContext=new SP.ClientContext(“http://server/collection"))
{
//配置处理程序以设置FBA模式
clientContext.ExecutingWebRequest+=新事件处理程序(ctx_MixedAuthRequest);
//使用默认模式在此进程的凭据下执行
clientContext.AuthenticationMode=SP.ClientAuthenticationMode.Default;
clientContext.Credentials=System.Net.CredentialCache.DefaultCredentials;
clientContext.ExecuteQuery();
}
}
私有void ctx_MixedAuthRequest(对象发送方,SP.WebRequestEventArgs e)
{
尝试
{
//添加通知SharePoint使用FBA的标题
e、 WebRequestExecutor.RequestHeaders.Add(“X-FORMS_-BASED_-AUTH_-ACCEPTED”,“f”);
}
捕获(例外情况除外)
{
字符串错误=例如消息;
}
}
var hostWeb=Page.Request[“SPHostUrl”];
使用(var clientContext=newclientcontext(hostWeb))
{
clientContext.ExecutingWebRequest+=新事件处理程序(clientContext\u ExecutingWebRequest);
Load(clientContext.Web,Web=>Web.Title);
clientContext.ExecuteQuery();
Write(clientContext.Web.Title);
}
静态void clientContext_ExecutingWebRequest(对象发送方,WebRequestEventArgs e)
{
e、 WebRequestExecutor.WebRequest.Headers.Add(“X-FORMS_-BASED_-AUTH_-ACCEPTED”,“f”);
}
您找到解决方案了吗?为什么OP要“试试这个”?一个好的答案总是会有一个解释,说明做了什么以及为什么这样做,不仅是为了OP,而且是为了未来的访客,以便他们可以找到这个问题并阅读你的答案。
public void Whatevermethod()
{
using (SP.ClientContext clientContext = new SP.ClientContext("http://server/collection"))
{
//Configure the handler to set FBA mode
clientContext.ExecutingWebRequest += new EventHandler<SP.WebRequestEventArgs>(ctx_MixedAuthRequest);
//Use the default mode to execute under the credentials of this process
clientContext.AuthenticationMode = SP.ClientAuthenticationMode.Default;
clientContext.Credentials = System.Net.CredentialCache.DefaultCredentials;
clientContext.ExecuteQuery();
}
}
private void ctx_MixedAuthRequest(object sender, SP.WebRequestEventArgs e)
{
try
{
//Add the header that tells SharePoint to use FBA
e.WebRequestExecutor.RequestHeaders.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
}
catch (Exception ex)
{
string error = ex.Message;
}
}
var hostWeb = Page.Request["SPHostUrl"];
using (var clientContext = new ClientContext(hostWeb))
{
clientContext.ExecutingWebRequest += new EventHandler<WebRequestEventArgs>(clientContext_ExecutingWebRequest);
clientContext.Load(clientContext.Web, web => web.Title);
clientContext.ExecuteQuery();
Response.Write(clientContext.Web.Title);
}
static void clientContext_ExecutingWebRequest(object sender, WebRequestEventArgs e)
{
e.WebRequestExecutor.WebRequest.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
}