小编Der*_*rek的帖子

c#创建日志文件的最佳方法

我正在编写一个工具,它将检查整个网络中工作站的运行状况,并根据发现的问题进行修复.我想创建一个日志文件,因为应用程序正在运行每台计算机上的任务/检查.我现在只想让它在一台机器上运行,但是它会一次扫描100多台机器(螺纹外出).

创建日志文件的最佳方法是什么?

我正在考虑使用a List<string>在内存中构建日志文件,然后在完成后将其输出到文件中.

我只是觉得可能有更好的方法吗?

c# logging file

32
推荐指数
5
解决办法
9万
查看次数

从Web API在MVC中存储Bearer Token的位置

脚本

我有一个ASP.NET Web API,它使用OAuth密码流来提供承载令牌以获取对其资源的访问权限.

我现在正在制作一个需要使用此API的MVC应用程序.

计划是让MVC控制器代表客户端浏览器调用API.

来自浏览器的ajax请求将命中MVC控制器,然后进行API调用.然后将结果作为JSON反馈给客户端并在java脚本中处理.

客户端永远不应直接与API通信.

获得认证.

通过成功调用web api令牌端点,我需要找到在MVC应用程序中收到承载令牌后处理承载令牌的最佳方法.

我需要在随后的api调用中使用这个bearer token.

我的计划是把它存放在 System.Web.HttpContext.Current.Session["BearerToken"]

然后我可以创建一个自定义AuthorizationAttribute来检查当前HttpContext中是否存在BearerToken,如果它不存在,客户端将需要重新访问令牌端点.

这看起来可行吗?

我要求各方就此提出意见,因为我不相信这是我项目的最佳解决方案.

c# security session asp.net-mvc-5 asp.net-web-api2

18
推荐指数
1
解决办法
3万
查看次数

OAuth 客户端凭据流 - 刷新令牌

情景

我最近构建了一个 API,并使用不OAuth记名访问令牌保护了它的资源。

我已经使用了Client_CredentialsFlow,因为它将由客户端而不是用户访问。

事情是这样的,当客户成功提供了client_id并且client_secret他们收到如下响应时: -

{
  "access_token": "<Access Token>",
  "token_type": "bearer",
  "expires_in": 1199,
  "refresh_token": "<Refresh Token>"
}
Run Code Online (Sandbox Code Playgroud)

刷新令牌。

不太了解刷新令牌,我立即认为客户端将能够提供 OAuth 服务器refresh_token来检索新的Access_Token.

这是“有点”正确的。

为了使用该refresh_token客户端仍然需要通过client_idclient_secret随着refresh_token获得新的访问令牌。

grant_type也需要改变refresh_token

使用此流程的 refresh_token 的好处在哪里?如果我每次都需要传递 client_id 和 client_secret,您肯定会完全避免使用刷新令牌吗?

oauth oauth-2.0

11
推荐指数
1
解决办法
7153
查看次数

VueJs 2与Vuex vs React与Redux

过去几天我和Vuex一起看VueJs 2,我非常喜欢它.

我只简单介绍了React,我发现vue js 2更容易上手.

React似乎越来越受欢迎,但我看不出React优于Vue 2的好处.

两者都是基于组件的框架,具有路由和状态管理工具.

那么有人可以解释这些框架之间的主要区别是什么?

reactjs vuejs2

10
推荐指数
1
解决办法
3098
查看次数

TimeSpan字符串格式

我有一个Timespan,我需要以特定的格式输出,如下所示: -

TimeSpan TimeDifference = DateTime.Now - RandomDate;
Run Code Online (Sandbox Code Playgroud)

我像这样格式化TimeSpan: -

string result = string.Format(@"{0:hh\:mm\:ss}", TimeDifference);
Run Code Online (Sandbox Code Playgroud)

结果将如下所示: -

"00:16:45.6184635"

如何将这些秒数舍入到0位小数?

Expected Result = 00:16:46
Run Code Online (Sandbox Code Playgroud)

谢谢

c# string timespan .net-3.5

9
推荐指数
3
解决办法
2万
查看次数

确定所有线程何时完成c#

作为C#的初学者,我对线程非常陌生.我有一个程序将触发Windows应用程序内的多个线程.我的目标是为列表中的每个项目启动一个新线程.此列表中的项目是网络上的工作站名称.创建的每个线程都会在每台机器上进行修复,当线程完成后,它会写入任何发现的错误的日志文件等.但我想要确定的是所有线程何时完成.所以,如果我有100台机器,100个线程,我如何确定何时关闭?

以下是我的方法: -

private void repairClientsToolStripMenuItem_Click(object sender, EventArgs e)
{
    if (machineList.Count() != 0)
    {
        foreach (string ws in machineList)
        {
            new Thread(new ParameterizedThreadStart(fixClient), stack).Start(ws);
        }
    }
    else
    {
         MessageBox.Show("Please import data before attempting this procedure");
    }
}
Run Code Online (Sandbox Code Playgroud)

c# multithreading thread-safety

8
推荐指数
1
解决办法
2万
查看次数

ASP.NET多线程Web请求

我正在我的ASP.NET解决方案中构建一个页面,该页面从第三方API服务中检索大部分数据.

页面本身需要对API进行大约5次单独的不同调用以填充其所有控件,因为每个API请求都会返回不同的数据集.

我想处理我在新线程上进行的每个单独的Web请求,同时减少加载时间.

我正在制作的每个请求都是这样的: -

WebRequest request = WebRequest.Create(requestUrl);

string response = new StreamReader(request.GetResponse().GetResponseStream()).ReadToEnd();

return new JsonSerializer().Deserialize<OccupationSearch>(new JsonTextReader(new StringReader(response)));
Run Code Online (Sandbox Code Playgroud)

首先,我应该尝试这个吗?即,安全吗?并且它会通过多线程来提高性能.

其次,这样做的最佳方法是什么?多线程系统有许多不同的方法,但最适合这项任务的方法是什么?

c# asp.net multithreading webrequest

8
推荐指数
2
解决办法
2万
查看次数

C#在具有锁定位置的表单中嵌入命令提示符

我一直在研究如何将命令提示符窗口嵌入到WinForm中.

我有许多使用pinvoke的例子,但是我希望能够将命令提示符窗口锁定在end_user无法移动的表单内的严格位置.

这可能吗?

这样做的原因是我们在大型网络上使用远程工具,您可以在会话中同时打开许多这些工具.我想尽可能将它们全部放入一个空间.

谢谢

c# pinvoke cmd winforms

6
推荐指数
1
解决办法
1140
查看次数

SwashBuckle/Swagger - OAuth资源所有者密码流

我正试图在我的Asp.Net Web API中实现招摇,我遇到了一个问题.

我正在使用密码资源所有者流,我不得不添加一个解决方案来执行此操作,这包含在以下堆栈溢出问题中: -

Swagger/Swashbuckle:具有资源所有者密码凭证授权的OAuth2

我已经完成了所有工作,通过javascript将Bearer令牌添加到当前浏览器窗口中的请求标头,但是api调用需要授权的控制器方法仍然返回"401 - 授权失败".

以下是获取持票人令牌并添加标题的JavaScript: -

 $('#input_apiKey').change(function () {
    var key = $('#input_apiKey')[0].value;
    var credentials = key.split(':'); //username:password expected
    $.ajax({
        url: "http://localhost:42291/token",
        type: "post",
        contenttype: 'x-www-form-urlencoded',
        data: "grant_type=password&username=" + credentials[0] + "&password=" + credentials[1],
        success: function (response) {
            var bearerToken = 'Bearer ' + response.access_token;

            window.swaggerUi.api.clientAuthorizations.add('Authorization', new window.SwaggerClient.ApiKeyAuthorization('Authorization', bearerToken, 'header'));
            window.swaggerUi.api.clientAuthorizations.remove('api_key');

            alert("Login Succesfull!");
        },
        error: function (xhr, ajaxoptions, thrownerror) {
            alert("Login failed!");
        }
    });
}); 
Run Code Online (Sandbox Code Playgroud)

Swagger响应中的卷曲是: -

卷曲-X GET --header "接受:应用/ JSON" --header "授权:承载NqlSG-WyTx2zkYE8xFklGyZWlQDZdsCKZBHruEXvX47N7PAzw4-jZ4eH5D0yFzQTXj13RwKFFt1rUZt2fzWj1vR5UR87wdlKC3YvsTojYV4-3DsWwY7qYRfiKPuM0j09c3X5lnrtlBVJ1rBRUH0TLjfw_yGxgoLBwOJl9xyC1YWNoPOe2nzL4lMOHodAnMem0IBMJmUo3Rt575tnWAbBsQXWhlImDIxCZXvkZdJtlXfIfBSUdY9gfRWL0ZjKbf7m2-yLzH0gpMAMuKaADmJlIudJc0d4SP1Nn2Kh2HuVH8CX4QgZuu4egl9N6rY2smorP2vBSC4_dC4CpmYYzOTu2wUnUhHDY2Q6NWl377ijDKwZLcW9jtD-2tBiEGmFuRV0mVGnh0zc4w9Ao9jPCdtrbSyGitgloBW-UG2bfyao3eE" " …

swagger-ui asp.net-web-api2 swagger-2.0 swashbuckle

6
推荐指数
1
解决办法
4658
查看次数

在客户端应用程序中配置用户授权

背景说明

谈到Identity Server 4,当我考虑客户端应用程序中的用户管理设计时,我遇到了障碍.

此时,我使用ASP身份用户帐户作为其用户存储设置Identity Server.

我已经构建了用于将用户添加到Identity Server用户存储的UI.

我已经测试过设置一个MVC应用程序的客户端,我正处于可以成功通过Identity Server进行身份验证并在我的客户端应用程序中接收openid身份令牌的位置.

Identity Server为我的客户端应用程序提供身份验证.

现在,我需要专注于我的应用程序内的授权.这就是我遇到困难的地方,我需要在应用程序本地创建用户,其中存储了应用程序中的用户权限.

我需要将Identity Server中的用户链接/关联到客户端应用程序中的用户.

一种方法是将sub存储在身份令牌中作为客户端应用程序数据库中的用户声明(Asp Identity).这样,当用户进行身份验证时,我可以根据令牌中的sub在本地数据库中找到它们.

sub必须是身份服务器用户存储中用户的唯一ID.这样,如果用户的电子邮件被更改,我们仍然可以链接这两个用户帐户.

客户端应用程序中的用户帐户不需要密码或电子邮件地址,它将纯粹是用于整个应用程序授权的声明和角色,以及任何其他特定于应用程序的信息.

在客户端应用程序中创建用户时,必须存在Identity Server和客户端应用程序之间的通信?

  • 我们需要关联这两个帐户吗?
  • 我们需要确保正在创建的客户端用户帐户还具有要成功通过身份验证的Identity Server用户帐户吗?

在这个过程中,这些任务应该完成吗?我正在寻找两个应用程序之间的通信流程的一些指导?

编辑

客户端应用程序中根本没有用户帐户是否可行?

这意味着用户的所有用户声明都存储在Identity Server的用户存储中.

当客户端使用IDP进行身份验证时,它仅请求特定于客户端应用程序的用户声明.

用户存储中的示例用户声明: -

  1. "clientA_role":"管理员"
  2. "clientB_role":"用户"

客户端应用程序A进行身份验证时,它仅请求范围clientA_role

这感觉很糟糕!

有什么建议?

openid asp.net-mvc openid-connect identityserver4

6
推荐指数
1
解决办法
436
查看次数