为什么我在C#ASP.net MVC Web API中收到401 Unauthorized?

时间:2016-09-02 20:23:06

标签: c# asp.net-mvc-4 asp.net-web-api2 sharepoint-2013 http-status-code-401

我有一个C#asp.net MVC项目,它将用作Web API来调用SharePoint 2013端点。我已经开始使用开发人员站点配置SharePoint,将适当的应用程序信息添加到项目中的App.manifest和web.config文件,使用SharePoint站点注册应用程序,以及为令牌创建/设置证书发行人。据我所知,是的,我已经检查过几次,所有正确的信息都输入了正确的位置。

我试图运行的代码如下:

[SharePointApiControllerContextFilter]
[HttpPost]
[Route("api/testapi/search/{id}")]
public System.Web.Http.Results.JsonResult<string> Search(string id)
{
    var spContext = SharePointApiControllerContextProvider.Current.GetSharePointContext(ControllerContext);
    string data = string.Empty;

    using (var clientContext = spContext.CreateUserClientContextForSPHost())
    {
        if (clientContext != null)
        {
            try
            {
                string url = spContext.SPHostUrl + "_api/search/query?querytext='" + HttpUtility.HtmlEncode(id) + "'";
                Uri uri = new Uri(url);

                HttpWebRequest searchReq = (HttpWebRequest)HttpWebRequest.Create(uri);
                searchReq.Accept = "application/json;odata=verbose";

                String username = "username";
                String password = "password";
                String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));

                searchReq.Headers.Add("Authorization", "Basic " + encoded);

                HttpWebResponse results = (HttpWebResponse)searchReq.GetResponse();
                var stream = results.GetResponseStream();

                var readStream = new StreamReader(stream, Encoding.UTF8);
                var content = readStream.ReadToEnd();
                return Json<string>(content);
            }
            catch (WebException we)
            {
                return Json<string>(we.ToString());
            }
            catch (Exception e) {
                return Json<string>(e.ToString());
            }
        }
    }
    return Json<string>(data);
}

在服务器上的IIS中,仅启用基本身份验证,ASP.net模拟和表单身份验证。

似乎所有内容都设置正确,但是根据我的基本身份验证请求,我总是从SharePoint获得401未经授权的响应。我还注意到,实际的API端点在从Web浏览器直接访问时会无限重定向。

有人会帮我解决API和端点的问题吗?感谢。

0 个答案:

没有答案