【发布时间】:2014-12-11 11:59:25
【问题描述】:
我有一个如下的路由
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
现在对于 ID 部分,我正在组合由“-”字符分隔的多组数据,并使用 AES (RijndaelManaged) 加密对其进行加密。我将其 UrlEncode 并发送给某人的电子邮件,如下所示...
http://localhost:7777/Product/Invite/%e3%b7%92%e4%97%ad%eb%b6%b3%e3%b7%90%eb%b2%8c%e2%aa%ad%e7%86%87%e9%b6%9e%ec%ae%aa%ec%a7%a2%ec%9a%a0%ec%ba%be%e2%89%bc%e5%ba%aa%ee%be%a8%ee%9f%a8%ea%aa%b6%e3%87%83%e3%8c%b4%eb%99%89%e8%8f%bb%e4%b0%ab%ef%bf%bd%e7%a0%99
但是点击它时我得到了错误。
Bad Request - Invalid URL
HTTP Error 400. The request URL is invalid.
下面是加密和编码过程
string data1 = email.EmailID + " - /" + events.EventID + "-" + DateTime.Now.ToString("yyyyMMddhhmm") + "-" + events.MemberID;
var encoding = new UTF8Encoding(false, true);
byte[] cypherBytes = advEncryProvider.Encrypt(encoding.GetBytes(data1));
string dataEncodedString = HttpUtility.UrlEncode(GetString(cypherBytes));
尝试将 web.config 编辑为 How do I enable special characters in MVC routing?
但仍然没有运气
<system.web>
<httpRuntime targetFramework="4.5" requestPathInvalidCharacters="" requestValidationMode="2.0"/>
<compilation targetFramework="4.5" debug="true"/>
<pages validateRequest="false">
<namespaces>
<add namespace="System.Web.Helpers"/>
<add namespace="System.Web.Mvc"/>
<add namespace="System.Web.Mvc.Ajax"/>
<add namespace="System.Web.Mvc.Html"/>
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing"/>
<add namespace="System.Web.WebPages"/>
</namespaces>
</pages>
** 更新**
我设法通过按照 Callem Pittard 的建议进行 base64 编码来解决这个问题... :)
【问题讨论】:
-
为什么不用body而不是url来发送数据?
-
您可以对其进行 base64 编码/解码,从而在 url 中为您提供安全的字符...
-
Callem Pittard,我尝试了你的建议,它奏效了!谢谢!
-
您应该向 google 了解更多关于通过 URL 传递 base64 的信息 - 我相信它可能包含一些特殊字符,如果 URL 转义,最终可能会很大
标签: c# model-view-controller routes