从C#MVC应用程序

时间:2016-11-08 19:57:23

标签: c# json asp.net-mvc api okta

我正在创建一个用于使用Okta平台创建用户的示例应用程序(即概念证明)。我正在使用API​​调用但始终接收" BAD REQUEST"从Visual Studio 2013更新5运行C#MVC应用程序到我的Okta开发实例时。我想知道CORS和本地应用程序之间是否存在问题?

这是我到目前为止所做的:

  • 使用Postman测试API调用到我的开发环境并且调用工作(即用户在我的Okta开发管理环境中创建)

  • 创建一个API令牌,并使用前缀" SSWS"来调用它。在授权标题

  • 使用HttpClient.PostAsJsonAsync()方法进行API调用

  • 使用API​​调用/api/v1/users?limit=25.GetAsync()

  • 调用GET时,我的应用程序代码按预期工作
  • 使用以下Api调用:/ api / v1 / users?activate = false(使用密码创建用户;这适用于Postman,但不适用于MVC应用程序)

  • 使用http://json2csharp.com/创建符合Okta的JSON层次结构的C#类(从Okta的Postman API库中获取)

  • 使用上面的类,Visual Studio的文本查看器中显示的JSON(在单步执行代码时获得)在粘贴到Postman时使用POST调用

  • HttpResponse包含错误消息"请求正文格式不正确"

以下是用于创建和序列化(使用Json.NET)C#类的代码:

            RootObject root = new RootObject();
            root.profile = new Profile();
            root.profile.firstName = model.FirstName;
            root.profile.lastName = model.LastName;
            root.profile.email = model.Email;
            root.profile.login = model.UserName;

            root.credentials = new Credentials();
            root.credentials.password = new OktaTest.Models.Password();
            root.credentials.password.value = model.Password;

            string rootJson = JsonConvert.SerializeObject(root);

这会产生以下JSON(这包含虚拟数据):

{"profile":{"firstName":"Test","lastName":"User","email":"user@test.org","login":"user@test.org"},"credentials":{"password":{"value":"Testing123"}}}

以下是进行POST调用的代码行:

HttpResponseMessage responseMessage = await client.PostAsJsonAsync(url, rootJson);

以下是设置Accept标头的行:

client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

由于我能够在Postman中使用JSON,并且由于JSON在使用JSONLint时有效,因此我认为问题不在于JSON,而在于我本地之间的安全问题应用程序和开发环境。此测试是否应仅从托管应用程序运行,以便可以在Okta管理环境的CORS部分中显式分配站点?在这一点上,我还在研究和试验,我不确定我错过了什么,但我想我已经接近了。

非常感谢任何建议或指导!谢谢!

1 个答案:

答案 0 :(得分:1)

我建议您使用可以使用Okta C# SDK添加到应用程序的Okta.Core.Client NuGet package

示例控制台应用程序显示了如何将其用于create Okta usershttps://github.com/oktadeveloper/okta-sdk-dotnet-console-user-create

我希望这有帮助!