GVKun编程网logo

如何重用这个基于ASP.NET和C#中的Ultimate RestSharp客户端的API客户端?(c#restful api客户端)

14

在这篇文章中,我们将为您详细介绍如何重用这个基于ASP.NET和C#中的UltimateRestSharp客户端的API客户端?的内容,并且讨论关于c#restfulapi客户端的相关问题。此外,我们

在这篇文章中,我们将为您详细介绍如何重用这个基于ASP.NET和C#中的Ultimate RestSharp客户端的API客户端?的内容,并且讨论关于c#restful api客户端的相关问题。此外,我们还会涉及一些关于.net-core – 存储Azure Vault客户端ID和客户端密钥、Angular JS:REST/CRUD后端的GET/POST/DELETE/PUT客户端的完整示例?、API PUT /marketing/contacts/imports with restsharp、asp.net – Web API中的客户端证书和基于声明的身份的知识,以帮助您更全面地了解这个主题。

本文目录一览:

如何重用这个基于ASP.NET和C#中的Ultimate RestSharp客户端的API客户端?(c#restful api客户端)

如何重用这个基于ASP.NET和C#中的Ultimate RestSharp客户端的API客户端?(c#restful api客户端)

我是一名新的C#开发人员,我正在尝试重新使用我基于ASP.NET中的Ultimate RestSharp客户端构建的API客户端和C#解释 in this post.我能够创建文章中提到的所有类和先决条件,但我现在无法在我的应用程序中的某些地方使用客户端类

这是客户端代码:

public class UsersClient : BaseClient
{
    public UsersClient (ICacheService cache,IDeserializer serializer,IErrorLogger errorLogger)
        : base(cache,serializer,errorLogger,"http://yourBaseUrl.com") { }

    public User GetByID(int id)
    {
        RestRequest request = new RestRequest("users/{id}",Method.GET);
        request.AddUrlSegment("id",id.ToString());
        return GetFromCache<User>(request,"User" + id.ToString());
    }

}

现在,当我试图在一些ASP.NET页面的代码隐藏中调用GetById方法时,我无法看到或访问此方法,我不知道为什么.这是我用来访问该方法的代码行:

string userId = "JohnA";
var user = UsersClient.GetById(userId);

那我怎么能访问这个方法呢?或者如何在我的应用程序上使用API​​客户端?

更新:

我仍然在努力使用这个API客户端.你能否告诉我如何使用它以及如何应用依赖注入?

解决方法

您无法访问此类非静态方法.首先,您必须初始化UsersClient对象.

ICacheService cache = //initialize cache here
IDeserializer deserializer = //initialize deserializer here
IErrorLogger errorLogger = //initialize errorLogger here
UsersClient usersClient = new UsersClient(cache,deserializer,errorLogger); 

string userId = "JohnA"; 
var user = usersClient.GetById(userId);

我建议学习设计模式,如依赖注入和控制反转(已经使用,不确定它是否有意或无意识)并在这种情况下使用它们.

.net-core – 存储Azure Vault客户端ID和客户端密钥

.net-core – 存储Azure Vault客户端ID和客户端密钥

我正在使用.NET Core 2.0和ASP.NET Core 2.0进行应用程序开发. “test”应用程序是.NET Core Console应用程序.我写的核心代码是一个类库.一旦正确测试.我选择这样做,因为我不会暂时使用它(它正在替换旧的ASPNET代码).

无论如何,由于我必须使用大量的API密钥来处理各种服务,所以我决定使用Microsoft Azure Key Vault来存储密钥.我有这个设置,并了解它是如何工作的.测试应用程序使用测试Azure帐户,因此它并不重要.由于这是替换遗留代码并且它处于起步阶段,我是唯一的开发人员.

基本上,我遇到了这个问题.从我所看到的Azure Key Vault上没有太多信息.很多示例都将客户端ID和密钥存储在纯文本json文件中(例如:https://www.humankode.com/asp-net-core/how-to-store-secrets-in-azure-key-vault-using-net-core).我真的不明白这是如何安全的.如果有人要获得这些密钥,他们可以轻松访问Azure存储的信息,对吧?

Microsoft MSDN有一个授权访问的powershell命令(我丢失了原始链接,这是我能找到的最接近的链接:https://www.red-gate.com/simple-talk/cloud/platform-as-a-service/setting-up-and-configuring-an-azure-key-vault/)我的开发操作系统是Windows 10,我的主服务器操作系统是Debian.

我该如何处理?

解决方法

是的,你是对的,纯文本配置文件只能在开发期间使用,不能用于生产目的.通常,可用选项取决于您托管应用程序的位置和方式.

如果您有Azure Web App,则至少有下一个内置选项(from the documentation):

  • add the ClientId and ClientSecret values for the AppSettings in the Azure portal. By doing this,the actual values will not be in the web.config but protected via the Portal where you have separate access control capabilities. These values will be substituted for the values that you entered in your web.config. Make sure that the names are the same.

  • authenticate an Azure AD application is by using a Client ID and a Certificate instead of a Client ID and Client Secret. Following are the steps to use a Certificate in an Azure Web App:

    • Get or Create a Certificate
    • Associate the Certificate with an Azure AD application
    • Add code to your Web App to use the Certificate
    • Add a Certificate to your Web App

您还可以找到一种使用env变量来存储凭据的方法.只有在可以保证不能在prod机器上执行env变量的快照时,这可能没问题.请查看Environment Variables Considered Harmful for Your Secrets了解更多详情.

最后一件事:还有一种基于这个想法的技术,你需要存储/传递ClientSecret值,而ClientId应该根据托管App的机器/容器细节构建(例如docker container id) .我找到了一个Hashicorp Vault和一个在AWS上托管的应用程序的示例,但总的想法是相同的:Secret management with Vault

Angular JS:REST/CRUD后端的GET/POST/DELETE/PUT客户端的完整示例?

Angular JS:REST/CRUD后端的GET/POST/DELETE/PUT客户端的完整示例?

我已经实现了REST / CRUD后端,以下面的文章为例: http://coenraets.org/blog/2012/10/creating-a-rest-api-using-node-js-express-and-mongodb/。我有MongoDB本地运行,我不使用MongoLabs。

我遵循使用ngResource和Factory模式的Google教程,我有查询(GET所有项目),获取项目(GET),创建项目(POST)和删除项目(DELETE)工作。我无法以后端API想要的方式实现PUT – 对包含id(… / foo /)的URL的PUT,并且还包括更新的数据。

我有这个位的代码来定义我的服务:

angular.module('realmenServices',['ngResource']).
    factory('RealMen',function($resource){
    return $resource('http://localhost\\:3000/realmen/:entryId',{},{
      query: {method:'GET',params:{entryId:''},isArray:true},post: {method:'POST'},update: {method:'PUT'},remove: {method:'DELETE'}
    });

我从这个控制器代码调用方法:

$scope.change = function() {
    RealMen.update({entryId: $scope.entryId},function() {
            $location.path('/');
    });
}

但是当我调用update函数时,URL不包括ID值:它只是“/ realmen”,而不是“/ realmen / ID”。

我试过各种解决方案涉及添加“RealMen.prototype.update”,但仍然无法获得entryId显示在URL上。 (它也看起来像我必须建立JSON只包含数据库字段值自己 – POST操作为我自动创建一个新的条目时,但似乎没有一个数据结构只包含当我查看/编辑单个条目时的字段值)。

是否有一个示例客户端应用程序以预期的RESTful方式使用所有四个动词?

我还看到Restangular的参考和另一个解决方案,覆盖$ save,以便它可以发出POST或PUT(http://kirkbushell.me/angular-js-using-ng-resource-in-a-more-restful-manner/)。这种技术似乎变化如此之快,似乎没有一个好的参考解决方案,人们可​​以用作一个例子。

我是Restangular的创造者。

您可以查看此CRUD示例,了解如何在没有所需的URL配置和$ resource配置的情况下PUT / POST / GET元素。除此之外,你可以使用嵌套的资源,没有任何配置:)。

查看这个plunkr示例:

http://plnkr.co/edit/d6yDka?p=preview

您还可以查看README并在此处查看文档https://github.com/mgonto/restangular

如果您需要一些不在那里的功能,只需创建一个问题。我通常添加一个星期内要求的功能,因为我也使用这个库为我所有的AngularJS项目:)

希望它帮助!

API PUT /marketing/contacts/imports with restsharp

API PUT /marketing/contacts/imports with restsharp

如何解决API PUT /marketing/contacts/imports with restsharp?

由于内部原因,我需要将我的 servlet 从 Java 重新编码为 c#。 我正在尝试使用带有 restsharp 的 API PUT /marketing/contacts/imports 上传 CSV 文件。 我无法正确发送文件。

代码片段 请在我的 Java 代码段下方正常工作:

    File file = new File(CSV);
    byte[] data;
    try {
        
        data = Files.readAllBytes(file.toPath());
        HttpResponse<String> response2 = Unirest.put(URLSengrid)
        
        .header(processSendgridHeader(headerFromSengrid).get(0),processSendgridHeader(headerFromSengrid).get(1))
        //("x-amz-server-side-encryption","aws:kms")
        .body(data)
        .asstring();

    } catch (IOException e) {
        // Todo Auto-generated catch block
        e.printstacktrace();
    }

这里是非工作的 c# 代码:

byte[] file = System.IO.File.ReadAllBytes(testPath);

var clientSecondCall = new RestClient(URLSendgrid);
var requestSecondCall = new RestRequest(Method.PUT);
requestSecondCall.AddHeader("content -type","application/json");
requestSecondCall.AddHeader("x-amz-server-side-encryption","aws:kms");
requestSecondCall.AddParameter("application/json","{"file_type":"csv","field_mappings":["e1_T","e2_T","_rf2_T","e4_T","e5_T","e12_T","e13_T","e14_T","e15_T","e16_T"]}",ParameterType.RequestBody);
requestSecondCall.AddFile("file",file,testPath);

我花了很长时间寻找答案,但没有成功。任何帮助将不胜感激

技术细节: sendgrid-csharp 版本:9.* csharp 版本:v4.0.303190

解决方法

我认为问题在于您在 c# 代码中发送文件的方式。

Java 代码显然使用了请求的 Body,而 c# 代码使用的是 RestSharp。

Restsharp 以多部分形式发送文件,您的服务器可能没有资格处理。

我建议使用 HttpClient 对象:

HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage();
request.Method = HttpMethod.Put;
request.RequestUri = new Uri( "Your Url");
request.Content = new StringContent(File.ReadAllText(yourFilePath));
request.Headers.Add("your header name","your header value");

var response = client.SendAsync(request).Result;

asp.net – Web API中的客户端证书和基于声明的身份

asp.net – Web API中的客户端证书和基于声明的身份

如果访问通过HTTPS实现为ASP.NET Web API Controller的端点的客户端提供客户端证书,则该证书可通过Request.GetClientCertificate获得.但是,我想知道:是否有可能以基于声明的模型的形式提供与.NET 4.5中的安全模型集成的信息?

我想这样做的主要原因是我需要不同的客户端才能以不同的方式进行身份验证以访问相同的服务,因此我更愿意从证书等细节中抽象出来.我希望我的控制器能够根据当前用户的索赔做出决策,而不必担心这些索赔的起源.

我知道有一个X509CertificateClaimset类型,这使得它看起来像自然流程:

>通过TLS / SSL传递的客户端证书通过某种令牌映射过程表示为X509CertificateClaimset(类似于您可以用于ACS的联合提供程序生成的传入cookie由SessionSecurityTokenHandler处理的方式)
>声明转换模块(从ClaimsAuthenticationManager派生并使用< claimsAuthenticationManager>元素配置)检查来自证书的声明集,并将其转换为特定于非令牌的特定于应用程序的声明
>处理程序查找特定于应用程序的声明.

甚至还有一个X509SecurityTokenHandler,听起来应该这样做.但是,据我所知,这是针对在发送的消息中处理基于证书的身份验证的情况而设计的 – 它似乎没有任何支持证书的所有权证明发生在传输级别,即作为TLS / SSL握手的一部分.

我想知道是否需要编写自己的模块来执行此操作.从理论上讲,看起来可能只是处理AuthenticateRequest事件,查看证书请求,如果存在,则从证书构建X509CertificateClaimset.但是……那又怎样?我只是创建自己的ClaimsPrincipal并替换现有用户吗?或者是否有一些“正确”的方式将我发现的声明添加到集合中? (客户端证书不一定是声明的唯一来源 – 我的应用程序已经在使用与ACS集成的声明.是否有一种标准机制来确保所有可能的声明来源都正确合并?)

它看起来像SessionAuthenticationModule(SAM)是当前提供声明主体的身份模型组件,它只是替换先前在上下文中的那个以及当前线程的用户.但它似乎提供了可扩展性 – 如果覆盖其ValidateSessionToken,则返回构成主体的ClaimsIdentity对象集.所以在理论上,我可以覆盖它并在那时添加任何其他声明.

但我不确定这是不行的方式.据我所知,SAM在ClaimsAuthenticationManager完成其声明转换后执行此操作.或者声称转换错误的模型与这里一起去?

解决方法

看看 here:客户端证书身份验证和声明生成是Thinktecture.IndetityModel的一部分.

今天关于如何重用这个基于ASP.NET和C#中的Ultimate RestSharp客户端的API客户端?c#restful api客户端的讲解已经结束,谢谢您的阅读,如果想了解更多关于.net-core – 存储Azure Vault客户端ID和客户端密钥、Angular JS:REST/CRUD后端的GET/POST/DELETE/PUT客户端的完整示例?、API PUT /marketing/contacts/imports with restsharp、asp.net – Web API中的客户端证书和基于声明的身份的相关知识,请在本站搜索。

本文标签: