Restful post在达到295个字符时抛出400个无效url

本文关键字:400个 无效 url 字符 post 295个 Restful | 更新日期: 2023-09-27 18:28:57

我用WebApi创建了一个restful Web服务。

我正试图在这个网址上发帖

../api/AAEAAAD_____AQAAAAAAAAAMAgAAAEVPYmplY3RUb0Jhc2U2NCwgVmVyc2lvbj0xLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABlPYmplY3RUb0Jhc2U2NC5DcmVkZW50aWFsAgAAABk8VXNlcm5hbWU-a19fQmFja2luZ0ZpZWxkGTxQYXNRmllbGQBAQIAAAAGAwAAAA5hd2NhQGF0ZWEtYW5jdAYEAAAAC0czcnRtNG5zMGZ0CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2/say

base64使用进行编码

HttpServerUtility.UrlTokenEncode();

我在试着做一篇文章时得到了"HTTP Error 400. The request URL is invalid."

我已经尝试过设置maxUrlLength,因为我看到其他一些人也有同样的问题,唉,这没有帮助。

到目前为止,我已经尝试过

  • 正在更改web.config中的maxUrlLength
  • 在注册表中设置UrlSegmentMaxLength

到目前为止,一切都没有奏效。我发现神奇的数字是294个完整url中允许的字符,意思是->如果我从长字符串中删除一些字符,直到我得到294个字符,一切都会按预期进行,为什么确定这不是路由问题,也不是我的后方法的问题

关于这个问题可能是什么,有什么好主意吗?

对于任何试图实现与我相同目标的人-这是我的路线

  config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{key}/{controller}/{id}",
            defaults: new { key=RouteParameter.Optional,id = RouteParameter.Optional }
            );

和我的Post方法

public string Post(string key)
    {
       if(ConvertFromBase64(key))
       {
       //Do stuff
       }
    }

Restful post在达到295个字符时抛出400个无效url

是否改为使用查询字符串中的键?

public class SomeController : Controller
    [Route("api/say")]
    public ActionResult Say(string key) {
    }

使用类似的url

../api/say?key=AAEAAAD_____AQAAAAAAAAAMAgAAAEVPYmplY3RUb0Jhc2U2NCwgVmVyc2lvbj0xLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABlPYmplY3RUb0Jhc2U2NC5DcmVkZW50aWFsAgAAABk8VXNlcm5hbWU-a19fQmFja2luZ0ZpZWxkGTxQYXNRmllbGQBAQIAAAAGAwAAAA5hd2NhQGF0ZWEtYW5jdAYEAAAAC0czcnRtNG5zMGZ0CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2

我知道您尝试过web.config文件,但您能尝试增加key参数的maxLength吗?

config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{key:maxlength(500)}/{controller}/{id}", //whatever is the max length of your parameter...
        defaults: new { key=RouteParameter.Optional,id = RouteParameter.Optional }
        );