C# Sharepoint 2013基于表单的身份验证应用程序禁用错误403

C# Sharepoint 2013基于表单的身份验证应用程序禁用错误403,c#,authentication,sharepoint,forms-authentication,C#,Authentication,Sharepoint,Forms Authentication,我正在为SharePoint 2013开发一个提供商托管的应用程序 我在一个开发集合上调试这个应用程序,同时激活了Windows身份验证和FBA(基于表单的身份验证)。我可以使用我的Windows帐户或存储在SQL Server中的用户成功访问此集合。这两个帐户都是集合的管理员,对集合具有完全控制权 当我运行应用程序时,通常会出现一个窗口,询问我想要的身份验证模式。成功连接到用户(两者都在工作)后,我在clientContext.ExecuteQuery()上得到:“远程服务器返回错误:(403

我正在为SharePoint 2013开发一个提供商托管的应用程序

我在一个开发集合上调试这个应用程序,同时激活了Windows身份验证和FBA(基于表单的身份验证)。我可以使用我的Windows帐户或存储在SQL Server中的用户成功访问此集合。这两个帐户都是集合的管理员,对集合具有完全控制权

当我运行应用程序时,通常会出现一个窗口,询问我想要的身份验证模式。成功连接到用户(两者都在工作)后,我在clientContext.ExecuteQuery()上得到:“远程服务器返回错误:(403)禁止”

我应该明确指出,如果我禁用集合上的FBA,只允许Windows身份验证,它会像一个符咒一样工作

我做错了什么?有什么想法吗

感谢您的帮助

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");
}