C# Rest调用WebException 401仅在混合身份验证webapp中未经授权

C# Rest调用WebException 401仅在混合身份验证webapp中未经授权,c#,rest,sharepoint,sharepoint-2013,fba,C#,Rest,Sharepoint,Sharepoint 2013,Fba,在尝试从SharePoint应用程序(特别是从.NET控制台应用程序)外部进行rest调用时,我遇到了一种奇怪的行为。只要我使用DefaultCredentials,一切都很好,只要我的Web应用程序不允许FBA(基于表单的身份验证),我就能够毫无问题地交付网络凭据 但一旦FBA身份验证被激活,我就无法拨打rest电话,并返回401 Unauthorized var req = (HttpWebRequest)HttpWebRequest.Create("http://{url}/_api/we

在尝试从SharePoint应用程序(特别是从.NET控制台应用程序)外部进行rest调用时,我遇到了一种奇怪的行为。只要我使用DefaultCredentials,一切都很好,只要我的Web应用程序不允许FBA(基于表单的身份验证),我就能够毫无问题地交付网络凭据

但一旦FBA身份验证被激活,我就无法拨打rest电话,并返回401 Unauthorized

var req = (HttpWebRequest)HttpWebRequest.Create("http://{url}/_api/web/title");
req.Method = "GET";
req.Credentials = new NetworkCredential("{user}", "{pass}");
req.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
var response = (HttpWebResponse)req.GetResponse();
我也尝试过这样的方式来提交凭证,如下所示:

var req = (HttpWebRequest)HttpWebRequest.Create("http://{url}/_api/web/title");
req.Method = "GET";
req.Headers.Add("X-FORMS_BASED_AUTH_ACCEPTED", "f");
var ccache = new CredentialCache();
ccache.Add(new Uri("http://{url}"), "Basic", new NetworkCredential("{user}", "{pass}"));
req.Credentials = ccache;
var response = (HttpWebResponse)req.GetResponse();

是否有人对可能出现的错误以及我如何实现在混合身份验证web应用程序中使用凭据访问rest api的目标有任何提示或想法?

一个可行的解决方法是将SharePoint web应用程序扩展到第二个区域,并且在该区域上没有启用FBA。所以你会有这样的东西:
www.mysharepointsite.com嘿,克里斯,让我在我们的环境中尝试一下,但另一方面,为什么这是必要的?我找不到任何信息说明为什么rest与凭据不应该在混合的Web应用程序中实现。我会睁大眼睛。我猜是因为你们都进行了配置,所以它不知道要验证什么-所以它会将凭据重定向到登录页面(一个下拉列表,询问要使用哪种类型的凭据)-就像你以交互方式登录时一样。与启用搜索爬网非常相似,您只需要默认区域上的窗口:您可能希望使用fiddler查看实际返回的内容,或者在调试中检查响应的内容。