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
相关产品推荐
相关产品推荐

