我目前正在编写一个ASP.NET Core Web API,其中包含一个以加密值作为参数的操作。
我试图测试此操作,并且网址甚至无法在网络浏览器中提交,起初我认为这可能是因为网址过长但我发现了这个问题answer我的网址远低于2000个字符的限制。我已经将参数更改为一个简单的字符串(" hello")并且它提交正常并运行代码。我在调试我的应用程序时尝试使用Edge和IE11,在Edge中根本没有任何事情发生,在IE11中我得到一条消息说:
Windows无法找到' http://localhost:5000/api/ ...'检查拼写,然后重试
在任何一种情况下,应用程序中的代码都不会执行(我在控制器构造函数的第一行放置一个断点,而不是被击中)。
我已经在下面列出了其中一个网址的示例,以及我用来生成加密字符串的代码,它使用HttpUtility.UrlEncode来将加密的byte[]
数组转换为字符串。
示例网址(不起作用的网址):
动作:
[HttpGet("[action]/{encrypted}")]
public string DoAction(string encrypted)
{
return "Executed";
}
生成加密字符串:
private string GenerateEncryptedString()
{
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
byte[] data = HttpUtility.UrlDecodeToBytes("AHMW9GMXQZXYL04EYBIW");
byte[] encryptedData = rsaProvider.Encrypt(data, true);
string encryptedString = HttpUtility.UrlEncode(encryptedData);
return encryptedString;
}
我不确定在将加密数据转换为字符串的方法中是否出错,但我很感激有关如何解决此问题的任何反馈。
答案 0 :(得分:0)
我认为你应该尝试在查询字符串中传递这些数据,而不是在url的位置( path )部分传递(某些字符可能在路径中被禁止作为安全层),所以在编码数据之前添加?data=
。