【问题标题】:Bad Request - Invalid URL - HTTP Error 400. The request URL is invalid错误请求 - 无效 URL - HTTP 错误 400。请求 URL 无效
【发布时间】: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 编码来解决这个问题... :)

An efficient way to Base64 encode a byte array?

【问题讨论】:

  • 为什么不用body而不是url来发送数据?
  • 您可以对其进行 base64 编码/解码,从而在 url 中为您提供安全的字符...
  • Callem Pittard,我尝试了你的建议,它奏效了!谢谢!
  • 您应该向 google 了解更多关于通过 URL 传递 base64 的信息 - 我相信它可能包含一些特殊字符,如果 URL 转义,最终可能会很大

标签: c# model-view-controller routes


【解决方案1】:

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

如果您在 Postman 中收到错误“找不到资源”,请检查隐藏的尾随空格。

【讨论】:

    【解决方案2】:

    默认情况下,URL 字符最大长度为 260,由 HTTP.SYS 注册表定义。我认为 base64 编码你的 URL 只是将它缩短到低于这个限制。如果需要,您可以通过向注册表添加新值来覆盖此限制。

    有关详细信息,请参阅本文: https://support.microsoft.com/en-us/kb/820129

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      • 1970-01-01
      • 2021-06-29
      • 2017-02-03
      • 1970-01-01
      • 2019-11-30
      • 1970-01-01
      相关资源
      最近更新 更多