Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用消息处理程序和HttpClient的Web API身份验证_C#_Authentication_Asp.net Web Api - Fatal编程技术网

C# 使用消息处理程序和HttpClient的Web API身份验证

C# 使用消息处理程序和HttpClient的Web API身份验证,c#,authentication,asp.net-web-api,C#,Authentication,Asp.net Web Api,我是使用web API进行web开发的新手,在使用自定义消息处理程序进行身份验证时遇到了一些问题——特别是使用HttpClient从C#WPF应用程序调用web API方法 我已经使用定制的DelegatingHandler实现了身份验证,如所给出的TokenInspector类示例(不包括HTTPS内容)。从这篇文章中我了解到,与流行文章中的操作过滤器相比,这将身份验证提升到了请求管道的更高层次 我可以使用ajax调用成功地调用我的安全方法,如下所示(其中_key是安全令牌): 我正在为我的W

我是使用web API进行web开发的新手,在使用自定义消息处理程序进行身份验证时遇到了一些问题——特别是使用HttpClient从C#WPF应用程序调用web API方法

我已经使用定制的DelegatingHandler实现了身份验证,如所给出的TokenInspector类示例(不包括HTTPS内容)。从这篇文章中我了解到,与流行文章中的操作过滤器相比,这将身份验证提升到了请求管道的更高层次

我可以使用ajax调用成功地调用我的安全方法,如下所示(其中_key是安全令牌):

我正在为我的Web API编写C#测试工具-如何使用HttpClient在C#中处理这种类型的身份验证?

尝试以下方法:

var client = new HttpClient();
var request = new HttpRequestMessage();
request.Headers.Add("X-Token", "token");
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
request.Method = HttpMethod.Get;
client.SendAsync(request);

我得到了一个“内部服务器错误”响应,与我迄今为止的所有其他尝试相同。有没有办法让服务器发送有关错误的更多详细信息?我在自定义DelegatingHandler类的SendAsync方法中放置了一个断点,但没有命中它。您的处理程序看起来如何?您是如何注册的?您的代码按预期工作。必须存在与MessageHandler实现无关的错误。我已将另一个方法添加到我的控制器以进行测试-它与您的解决方案一起工作。然后我改变了原来的控制器方法名称,现在它可以工作了,奇怪。。。谢谢你的帮助。我已经添加了一个类似的问题,我用这种方法发布数据。
var client = new HttpClient();
var request = new HttpRequestMessage();
request.Headers.Add("X-Token", "token");
request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
request.Method = HttpMethod.Get;
client.SendAsync(request);