如何验证 WPF 客户端对 ASP .NET WebAPI 2 的请求

2024-03-14

我刚刚创建了一个ASP .NET MVC 5 Web API项目并添加了实体框架模型和其他东西以使其能够使用ASP。网络身份 http://identity.codeplex.com/.

现在,我需要从 WPF 客户端应用程序创建一个对该 API 标准方法的简单的经过身份验证的请求。

ASP .NET MVC 5 Web API 代码

[Authorize]
[RoutePrefix("api/Account")]
public class AccountController : ApiController

        // GET api/Account/UserInfo
        [HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
        [Route("UserInfo")]
        public UserInfoViewModel GetUserInfo()
        {
            ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);

            return new UserInfoViewModel
            {
                UserName = User.Identity.GetUserName(),
                HasRegistered = externalLogin == null,
                LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null
            };
        }

WPF客户端代码

public partial class MainWindow : Window
{
    HttpClient client = new HttpClient();

    public MainWindow()
    {
        InitializeComponent();

        client.BaseAddress = new Uri("http://localhost:22678/");
        client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json")); // It  tells the server to send data in JSON format.
    }

    private  void Button_Click(object sender, RoutedEventArgs e)
    {
        Test();
    }

    private async void Test( )
    {
        try
        {
            var response = await client.GetAsync("api/Account/UserInfo");

            response.EnsureSuccessStatusCode(); // Throw on error code.

            var data = await response.Content.ReadAsAsync<UserInfoViewModel>();

        }
        catch (Newtonsoft.Json.JsonException jEx)
        {
            // This exception indicates a problem deserializing the request body.
            MessageBox.Show(jEx.Message);
        }
        catch (HttpRequestException ex)
        {
            MessageBox.Show(ex.Message);
        }
        finally
        {               
        }
    }
}

它似乎正在连接到主机,并且我收到了正确的错误。那没问题。

响应状态码不表示成功:401(未经授权)。

主要问题是我不确定如何使用 WPF 客户端发送用户名和密码...

(伙计们,我不是问我是否必须对其进行加密并在 API 方法实现上使用 Auth Filter。稍后我肯定会这样做......)

我听说我必须在标头请求中发送用户名和密码...但我不知道如何使用来完成HttpClient client = new HttpClient();

感谢您提供任何线索!

附:我有更换吗HttpClient with WebClient并使用Task (无法使用 HttpClient 对 ASP.NET Web Api 服务进行身份验证 https://stackoverflow.com/questions/10308938/unable-to-authenticate-to-asp-net-web-api-service-with-httpclient)?


您可以像这样发送当前登录的用户:

    var handler = new HttpClientHandler();
    handler.UseDefaultCredentials = true;
    _httpClient = new HttpClient(handler);

然后您可以创建自己的授权过滤器

public class MyAPIAuthorizationFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        //perform check here, perhaps against AD group, or check a roles based db?
        if(success)
        {
            base.OnActionExecuting(actionContext);
        }
        else
        {
            var msg = string.Format("User {0} attempted to use {1} but is not a member of the AD group.", id, actionContext.Request.Method);
            throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Unauthorized)
            {
                Content = new StringContent(msg),
                ReasonPhrase = msg
            });
        }
    }
}

然后对控制器中要保护的每个操作使用 [MyAPIAuthorizationFilter]。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何验证 WPF 客户端对 ASP .NET WebAPI 2 的请求 的相关文章

  • 如何将十六进制字符串转换为十六进制数字[重复]

    这个问题在这里已经有答案了 可能的重复 如何将十六进制字符串转换为有符号整数 https stackoverflow com questions 3705429 how do i convert hex string into signed
  • 将图像文件从网址复制到本地文件夹?

    我有该图像的网址 例如 http testsite com web abc jpg http testsite com web abc jpg 我想将该 URL 复制到 c images 中的本地文件夹中 而且当我将该文件复制到文件夹中时
  • 为什么这个函数指针赋值在直接赋值时有效,但在使用条件运算符时无效?

    本示例未使用 include 在 MacOS10 14 Eclipse IDE 上编译 使用 g 选项 O0 g3 Wall c fmessage length 0 假设这个变量声明 int fun int 这无法通过 std touppe
  • 访问“if”语句之外的变量

    我怎样才能使insuranceCost以外可用if陈述 if this comboBox5 Text Third Party Fire and Theft double insuranceCost 1 在 if 语句之外定义它 double
  • 无法从 Web api POST 读取正文数据

    我正在尝试从新的 Asp Net Web Api 中的请求中提取一些数据 我有一个像这样的处理程序设置 public class MyTestHandler DelegatingHandler protected override Syst
  • 从 future 中检索值时的 SIGABRT

    我在使用 C 11 future 时遇到问题 当我打电话时wait or get 关于返回的未来std async 程序接收从mutex标头 可能是什么问题呢 如何修复它 我在 Linux 上使用 g 4 6 将以下代码粘贴到 ideone
  • Paradox 表 - Oledb 异常:外部表不是预期的格式

    我正在使用 Oledb 从 Paradox 表中读取一些数据 我遇到的问题是 当我将代码复制到控制台应用程序时 代码可以工作 但在 WinForms 中却不行 两者都以 x86 进行调试 我实际上只是复制代码 在 WinForms 应用程序
  • 如何使用 wpf webbrowser 将数据发布到 Web 服务器

    我想从数据库获取数据并使用它来让用户登录到网站 我有一个包含 Web 浏览器控件的 wpf 页面 我有这样的代码 用于将用户登录到用 php 编写的网站
  • 默认值 C# 类 [重复]

    这个问题在这里已经有答案了 我在控制器中有一个函数 并且我收到表单的信息 我有这个代码 public Actionresult functionOne string a string b string c foo 我尝试将其转换为类似的类
  • C# datagridview 列转入数组

    我正在用 C 构建一个程序 并在其中包含一个 datagridview 组件 datagridview 有固定数量的列 2 我想将其保存到两个单独的数组中 但行数确实发生了变化 我怎么能这样做呢 假设一个名为 dataGridView1 的
  • 无法加载文件或程序集“EntityFramework,版本=6.0.0.0”

    我究竟做错了什么 我该如何解决这个问题 我有一个包含多个项目的解决方案 它是一个 MVC NET 4 5 Web 应用程序 在调试模式下启动后调用其中一个项目时 出现此错误 导致此错误的项目具有以下参考 两个都是版本6 0 0 0 应用程序
  • 防止GDB中的PLT(过程链接表)断点

    在最新版本的 GDB 中 在库函数调用上设置断点会导致多个实际断点 调用过程链接表 PLT 实际的函数调用 这意味着当调用库函数时 我们每次都会经历两次中断 在以前的 GDB 版本中 只会创建 2 因此您只能得到一次中断 那么问题来了 是否
  • dropdownlist DataTextField 由属性组成?

    有没有一种方法可以通过 C 使 asp net 中的下拉列表的 datatextfield 属性由对象的多个属性组成 public class MyObject public int Id get set public string Nam
  • 错误左值需要作为赋值C++的左操作数

    整个程序基本上只允许用户移动光标 如果用户位于给定的坐标范围 2 2 内 则允许用户键入输入 我刚刚提供了一些我认为足以解决问题的代码 我不知道是什么导致了这个问题 你能解释一下为什么会发生吗 void goToXY int int 创建一
  • 不兼容的类型 - 是因为数组已经是指针吗?

    在下面的代码中 我创建一个基于书籍结构的对象 并让它保存多个 书籍 我设置的是一个数组 即定义 启动的对象 然而 每当我去测试我对指针的了解 实践有帮助 并尝试创建一个指向创建的对象的指针时 它都会给我错误 C Users Justin D
  • 自定义 WPF 工具提示

    我想创建一个 WPF 工具提示 其中包含工具提示标题的标签 然后创建一个包含更详细文本的文本块 我在资源字典中创建了以下样式
  • 如何使用收益返回和递归获得字母的每个组合?

    我有几个像这样的字符串列表 可能有几十个列表 1 A B C 2 1 2 3 3 D E F 这三个仅作为示例 用户可以从几十个具有不同数量元素的类似列表中进行选择 再举个例子 这对于用户来说也是一个完全有效的选择 25 empty 4 1
  • 相当于 C# 中 Java 的“ByteBuffer.putType()”

    我正在尝试通过从 Java 移植代码来格式化 C 中的字节数组 在 Java 中 使用方法 buf putInt value buf putShort buf putDouble 等等 但我不知道如何将其移植到 C 我尝试过 MemoryS
  • 使用 Chrome 和 Selenium 设置 LocalStorage

    我正在尝试使用 OpenQA Selenium 和 Chrome 设置本地存储键和值 我认为这相当微不足道 但我似乎无法让它发挥作用 我对 C 很陌生 所以我可能错过了一些东西 无论如何 我有这个功能 public static void
  • WPF 路径:如何在 XAML 中绘制它?

    我想创建一个带有非矩形标题的自定义 GroupBox 如下图所示 正如你所看到的 标题的内容必须是可参数化的 因此可以在xaml中输入图像 标题和背景 提前致谢 谢谢您的回答 实际上我想在自定义组框中使用这个设计 所以在你的答案中 如果我不

随机推荐

  • 从 Django 服务器一次传输多个文件

    我正在运行 Django 服务器来为受保护网络中的另一台服务器提供文件 当用户请求一次访问多个文件时 我希望 Django 服务器将这些文件一次性传输给该用户 由于在浏览器中一次下载多个文件并不容易 因此需要以某种方式捆绑文件 我不希望我的
  • 如何将wrapper-div居中而不是内容居中

    我希望我的页面始终在浏览器中居中 而不影响内容 就像align text center 那样 我想将我的包装器 div 居中 我该怎么做 简化现有页面 div div Music Heaven div div div div div div
  • 使用领域驱动设计的node.js

    我正在将应用程序从 C 迁移到 Node js 我一边学习一边学习node js 所以我是一个node js 新手 我正在阅读 领域驱动设计的模式 原则和实践 一书 发现我当前的项目可以从中受益的很多重要信息 例如 书中有一个示例电子商务应
  • 数据绑定与 MVC 根本不兼容吗?

    数据绑定 http en wikipedia org wiki Data binding在视图和模型之间建立直接耦合 从而绕过控制器 从根本上讲 这打破了模型 视图控制器架构模式 我的想法正确吗 这是否会使数据绑定成为一件 坏事 Edit
  • awk 中的“非法主”是什么?

    awk 给我以下错误 awk illegal primary in regular expression lt gt lt at lt gt lt source line number 10 source file transpile aw
  • 如果我在 FFmpeg 中使用 av_read_frame 会丢失多个帧

    我有一个 3500 帧的 HEVC 序列 我正在编写一个解码器来读取它 逐帧读取并转储到 yuv 在我的 main 中 我有一个 for 循环 它调用解码器 3500 次 我假设在这个阶段 main 知道有多少帧 因此 对于每次调用解码器
  • SQL中计算一行中的Null列数

    我想知道是否可以在 SQL 中计算行的空列 我有一个具有可为空值的表 Customer 我只是想要一个查询 该查询返回特定行 特定客户 的空列数的 int 此方法为空列分配 1 或 0 并将它们全部加在一起 希望您没有太多可空列要在此处添加
  • 通过 Node.js 从 iOS 应用程序将图像上传到服务器

    我正在开发一个 iOS 应用程序并且正在使用node js用于服务器端脚本编写 我在从 iOS 应用程序将图像上传到服务器时遇到问题 如果我从网页表单上传图像 它工作正常 但如果从应用程序端上传 则无法正常工作 test file h3 P
  • 从另一个工作表中选择一个复选框

    我在工作表 A 上有一个 ActiveX CheckBox 控件 在工作表 B 上有另一个 ActiveX CheckBox 控件 当我检查 A 处的复选框时 我希望我的宏检查 B 处的复选框 到目前为止我已经尝试过 This http w
  • Sklearn 预处理 - PolynomialFeatures - 如何保留输出数组/数据帧的列名/标题

    TLDR 如何从 sklearn preprocessing PolynomialFeatures 函数获取输出 numpy 数组的标题 假设我有以下代码 import pandas as pd import numpy as np fro
  • 如何使用 django-nonrel 和 mongodb 进行自定义查询

    是否有推荐的方法使用 django nonrel 对 mongodb 进行自定义查询 我已经建立了一个完整的网站并运行良好 现在我只是添加一些地理空间索引和查询 并想知道对于地理空间查询是否已经有支持 或者是否有最佳实践方法来使用定制的询问
  • 是否可以以编程方式在 Web 组件中插入元素?

    是否可以自动或以编程方式插入特定类型的嵌套 Web 组件或元素 而无需指定slot属性在他们身上 考虑这样的结构
  • Bearer error="invalid_token", error_description="发行人无效"

    我有一个简单的 Web api 项目 如下所示 Authorize Route Get public ActionResult
  • SQL Server - 来自不同表的 CTE 递归 SUM 值

    我有一个表 其中的数据分层存储在名为Cs组织如下表所示 Table Name CsOrganization OrgId OrgParentId OrgName 1 NULL X COMPANY 2 1 Administrator 3 2 A
  • 获取 Julia Lang 中当前变量的列表

    我是朱莉娅 朗的新手 我是Matlab背景出来的 在Matlab中 当按下whos命令我将获取当前范围内的所有变量 而且 我可以将它们存储在另一个变量中 例如x whos Julia 中是否存在这样的命令 Matlab 中的示例代码 gt
  • 为什么“找不到可以导入的项目”?

    我正在尝试 将现有项目导入工作区 作为 根目录 我选择所有 java 和 class 文件所在的目录 Eclipse 写信给我 没有找到可以导入的项目 为什么 这个答案与 Laura 的答案相同 但是 在新的 Eclipse 版本中 您将无
  • 如何在 IE HTML 条件中创建“else”?

    我如何在 HTML 中执行此操作 我想做一个 其他 你不是在寻找别人 你是在寻找
  • Ajax 调用后是否可以使用 PHP 重定向页面?

    我有一个网站 我想为用户提供一个选项 如果他们单击表格的行 他们会被重定向到另一个页面 基于表格行的内容 所以我所做的基本上是使用 jQuery 收集数据并将其 POST 到 PHP 文件中 在我的 PHP 文件中 我想使用以下命令进行重定
  • 为了最大限度地提高 Mono 代码的可移植性,我应该注意哪些限制?

    我有兴趣使用 Mono 编写一些跨平台代码 以针对移动 iOS 和 Android 运行时 我仔细阅读了 Mono 和 MonoTouch 网站 但没有看到任何具体建议不要使用的方法 或者应该避免的 Mono 挂钩 然而 这似乎有点好得令人
  • 如何验证 WPF 客户端对 ASP .NET WebAPI 2 的请求

    我刚刚创建了一个ASP NET MVC 5 Web API项目并添加了实体框架模型和其他东西以使其能够使用ASP 网络身份 http identity codeplex com 现在 我需要从 WPF 客户端应用程序创建一个对该 API 标