C# - 将数据传递给JS并等待处理结果

时间:2017-11-13 23:13:34

标签: c# ajax multithreading asynchronous

无论如何将C#中的内容传递给JS,然后在JS中执行某些操作并将其返回给C#代码?

我正在研究MVC并且我在发送之前尝试加密视图中的密码,所以没有人可以偷看。我的想法是:

  1. 当点击提交时,AJAX呼叫要求服务器生成新的RSA密钥对
  2. 服务器生成新密钥对并将公钥发送到客户端,等待响应
  3. 客户端收到公钥,在js文件中加密密码并将加密密码发送到服务器
  4. 服务器收到等待的数据并解密密码
  5. 我认为是最好的"这样做的方法,但我不知道是否有可能用Ajax启动一个线程然后等待它收到响应,或者在x时间后死掉。我认为这是最好的方法,因为每次你需要提交密码时它都会生成一个唯一的密钥对,永远不会存储,所以如果有人选择你发送的请求,他们就会得到加密密码,不能用于任何事情。

1 个答案:

答案 0 :(得分:1)

您的问题格格不入。您不希望服务器向客户端发送任何内容,但客户端向服务器发送内容。 就像你的情景一样,这似乎很好:

  1. 客户端询问服务器:给我公钥
  2. 服务器响应:这是我能够选择私钥所需的密钥和ID
  3. 客户端加密,服务器不关心这里发生了什么。
  4. 客户端发送到服务器:这是您之前提供给我的加密密码和ID。
  5. 服务器查找给定密钥ID的密钥缓存
  6. 服务器使用从缓存中检索到的私钥解密密码,客户端等待响应。
  7. 服务器响应:密码正常或密码错误或者如果找不到提供的ID应该返回一些超时或其他错误。
  8. 当然,如果您想动态生成RSA密钥,请随机为每个请求保存一个解密密钥和一些会话密钥(客户也知道),这样您就可以匹配它们起来,但它应该工作。

    内置.NET内存缓存似乎完美地适用于此任务。您可以将数据放入缓存,检索,删除它并设置有效时间,然后.NET管理自己从缓存中删除对象。
    请参阅可用的.NET文档:https://msdn.microsoft.com/pl-pl/library/system.runtime.caching.memorycache(v=vs.110).aspx

    可以在Ajax中创建请求并使其等待完成或超时,但您必须记住,该服务器无法联系客户端,除非客户端要求联系(发送请求)或您正在使用websockets(我认为,就像这个任务一样,它就像用来杀死苍蝇的大炮)。