当达到295个字符时,Restful post会抛出400个无效的url

时间:2014-11-04 12:15:14

标签: c# web-services rest asp.net-web-api

我已经使用Web-Api创建了一个安静的Web服务。

我试图在此网址发帖

../api/AAEAAAD_____AQAAAAAAAAAMAgAAAEVPYmplY3RUb0Jhc2U2NCwgVmVyc2lvbj0xLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABlPYmplY3RUb0Jhc2U2NC5DcmVkZW50aWFsAgAAABk8VXNlcm5hbWU-a19fQmFja2luZ0ZpZWxkGTxQYXNRmllbGQBAQIAAAAGAwAAAA5hd2NhQGF0ZWEtYW5jdAYEAAAAC0czcnRtNG5zMGZ0CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2/say

base64用

编码
HttpServerUtility.UrlTokenEncode();

我在尝试发帖时得到"HTTP Error 400. The request URL is invalid."

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

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

  • 在web.config中更改maxUrlLength。
  • 在注册表中设置UrlSegmentMaxLength
到目前为止,没有任何工作。 我发现这个神奇的数字是294个允许的字符,在完整网址中意为 - >如果我从长字符串中删除一些字符直到我得到294个字符,那么一切都是有意思的,为什么它确定它不是路由问题,也不是我的post方法的问题

关于可能出现什么问题的任何好主意?

对于任何想要达到同样目标的人,我都会尝试 - 继承人我的路线

  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
       }
    }

2 个答案:

答案 0 :(得分:1)

请尝试使用查询字符串中的键吗?

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

使用像

这样的网址
../api/say?key=AAEAAAD_____AQAAAAAAAAAMAgAAAEVPYmplY3RUb0Jhc2U2NCwgVmVyc2lvbj0xLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABlPYmplY3RUb0Jhc2U2NC5DcmVkZW50aWFsAgAAABk8VXNlcm5hbWU-a19fQmFja2luZ0ZpZWxkGTxQYXNRmllbGQBAQIAAAAGAwAAAA5hd2NhQGF0ZWEtYW5jdAYEAAAAC0czcnRtNG5zMGZ0CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2

答案 1 :(得分:0)

我知道你试过了web.config文件,但是你可以尝试增加maxLength参数的key吗?

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 }
        );