错误请求 - 无效的URL HTTP错误400.请求URL无效

时间:2014-10-16 07:49:33

标签: c# model-view-controller routes

我的路由按照以下

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );

现在对于id部分,我正在组合由“ - ”字符分隔的多组数据,并使用AES(RijndaelManaged)加密对其进行加密。我将对其进行编码并按以下方式发送给某人的电子邮件...

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编码来解决这个问题......:)

An efficient way to Base64 encode a byte array?

2 个答案:

答案 0 :(得分:0)

HTTP.SYS注册表定义的URL字符最大长度默认为260。我认为对您的网址进行base64编码只会将其缩短到此限制以下。如果需要,可以通过向注册表添加新值来覆盖此限制。

有关更多信息,请参阅此文章: library

答案 1 :(得分:0)

我有同样的错误。原来,当我将Teams中的URL粘贴到Postman中时,URL中存在一个看不见的坏字符。听起来像是一个愚蠢的错误,但花了我几个小时才弄清楚。因此,如果出现此错误,请确保您不粘贴信息,而是输入信息,还请确保没有隐藏的空格字符,然后看是否能解决问题。

相关问题