【问题标题】:Web API Authentication using Message Handler and HttpClient使用消息处理程序和 HttpClient 的 Web API 身份验证
【发布时间】:2013-12-30 21:01:09
【问题描述】:

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

我已经使用自定义 DelegatingHandler 实现了身份验证,如给定 here 的 TokenInspector 类示例(减去 HTTPS 内容)。从帖子中我了解到,与this 流行帖子中的操作过滤器相比,这将请求管道中的身份验证移动到更高的位置。

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

$.ajax({
    url: _api + '/Item',
    beforeSend: function(request) {
                    request.setRequestHeader("X-Token", _key);
                },
    type: 'GET',
    dataType: 'json',
    success: fnSuccessResult,
    error: function (xhr, status, error) {
               alert(xhr.status + ' ' + status + ' ' + error);
           }
});

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

【问题讨论】:

    标签: c# authentication asp.net-web-api


    【解决方案1】:

    试试这个:

    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 方法中放置了一个断点,但它没有被命中。
    • 你的 Handler 是什么样子的?你是怎么注册的?
    • 您的代码按预期工作。一定有与您的 MessageHandler 实现无关的错误。
    • 我在我的控制器中添加了另一种方法来测试 - 它适用于您的解决方案。然后我更改了原来的控制器方法名称,之后它现在可以工作了,奇怪……谢谢你的帮助。
    • 我添加了一个类似的follow-up question,说明我使用这种方法发布数据时遇到的问题。
    猜你喜欢
    • 2014-06-14
    • 2013-04-06
    • 1970-01-01
    • 2018-01-18
    • 2018-05-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多