You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript调用C# .NET MVC API:GET请求改POST实现加密传参

前端改造步骤
  • 保留原有jsencrypt加密逻辑,将需要传输的搜索参数用公钥加密后,通过动态表单提交的方式发起POST请求,这种方式可以实现和原GET请求完全一致的「新标签页打开返回视图」的效果,不需要用AJAX处理。
  • 代码示例如下:
// 替换原有a标签的点击逻辑
document.querySelector('#personList a').addEventListener('click', function(e) {
  e.preventDefault();
  // 这里替换为实际需要加密的搜索参数
  const originSearch = 'John';
  // 复用你已有的jsencrypt加密逻辑
  const encryptor = new JSEncrypt();
  encryptor.setPublicKey('你项目的RSA公钥字符串');
  const encryptedSearch = encryptor.encrypt(originSearch);

  // 动态创建POST表单
  const postForm = document.createElement('form');
  postForm.action = url + 'Persons/Search';
  postForm.method = 'POST';
  postForm.target = '_blank'; // 对应原逻辑的新标签打开效果

  // 构造加密参数字段
  const paramInput = document.createElement('input');
  paramInput.type = 'hidden';
  paramInput.name = 'encryptedFind'; // 和后端接收参数名保持一致
  paramInput.value = encryptedSearch;
  postForm.appendChild(paramInput);

  // 提交表单后自动移除
  document.body.appendChild(postForm);
  postForm.submit();
  document.body.removeChild(postForm);
});
后端.NET MVC改造步骤
  • 给原有的Search接口添加[HttpPost]注解,接收前端传递的加密参数后,用你项目已有的RSA私钥解密得到原始搜索内容,后续查询数据库、返回视图的逻辑和原GET接口完全一致即可。
  • 代码示例如下:
[HttpPost]
public ActionResult Search(string encryptedFind)
{
    // 复用项目已有的RSA解密方法,解密得到原始搜索内容
    string rawSearch = YourRsaDecryptMethod(encryptedFind, "你项目的RSA私钥字符串");
    // 下面完全复用原有GET请求的处理逻辑
    var result = db.Persons.Where(p => p.Name.Contains(rawSearch)).ToList();
    return View(result);
}
原有AJAX写法的问题说明
  • 你之前的AJAX写法如果是要提交JSON格式参数,需要补充两个配置:添加contentType: 'application/json; charset=utf-8',同时把data转为JSON字符串:data: JSON.stringify({body: encryptedmsg}),但这种方式只能拿到后端返回的HTML字符串,没法直接在新标签页渲染成完整页面,不符合你要和GET效果一致的需求,所以不推荐用AJAX实现。

内容的提问来源于stack exchange,提问作者alcor8

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 06:06:02