我们碰巧运行带有API的REST Web服务,要求客户端使用基本身份验证.我们用各种语言制作了一套简洁的样本,展示了如何与我们的服务进行交互.现在我正在检查服务的IIS日志,并发现以下模式经常发生:
看起来像第一个请求没有授权标头发送,然后第二个请求与正确的标头一起发送并成功.大多数情况下,日志记录包含"user-agent",这与我们在.NET示例中植入的字符串相同.
所以我认为问题仅在于.NET程序.我们的示例代码没有重现该问题,因此我假设用户以某种方式修改了代码或从头开始编写自己的代码.
我们尝试联系用户,但显然他们不想花时间研究.所以很高兴找到导致.NET程序这种行为的最可能的情况.
他们为什么要这样做?他们为什么不在第一次尝试时附上标题?
我正在尝试使用 HttpClient 为 HTTP Post 或 HTTP Get 编写客户端。当谷歌搜索时,我遇到了这些在 HttpClient 对象中设置这些身份验证的方法。一个使用 NetworkCredential,另一个使用 AuthenticationHeaderValue
HttpClient sClient;
HttpClientHandler sHandler = new HttpClientHandler();
sHandler.Credentials = new NetworkCredential("UserName", "Password");
sClient = new HttpClient(sHandler);
Run Code Online (Sandbox Code Playgroud)
或者
HttpClient sClient new HttpClient();
sClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic",Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes("UserName:Password")));
Run Code Online (Sandbox Code Playgroud)
在 MSDN 上阅读并没有给我关于它们之间差异的明确答案。在这种情况下,除了身份验证信息的存储方式之外,两者都会执行相同的操作吗?例如 AuthenticationHeaderValue 将其放入标头,而另一个则没有?就我的用例或最佳实践而言,其中一个比另一个更好吗?
我正在尝试使用 HTTPClient 和 REST 在 SP2013 中创建一个文件夹。
以下是对应用程序的要求和限制
我需要使用 REST 在 2013 文档库中创建一个文件夹。不允许 CSOM。
该程序必须是 C# 控制台应用程序。
我必须仅使用 HTTPClient 来调用 Web 服务。不应使用其他旧类或库。
集成身份验证是必须的。您不得在代码中输入您的用户名和密码。它必须使用进程的标识。
基于这些限制,我写了这段代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Net.Http.Formatting;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace RESTCreateFolder
{
class Program
{
static void Main(string[] args)
{
Program p = new Program();
int retVal = p.Process().Result;
}
private async Task<int> Process()
{
string url = "http://bi.abhi.com/testweb/";
using (HttpClient client = new HttpClient(new …Run Code Online (Sandbox Code Playgroud) c# officedev dotnet-httpclient sharepoint-2013 office365-apps