Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Restful post在达到295个字符时抛出400个无效url_C#_Web Services_Rest_Asp.net Web Api - Fatal编程技术网

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

C# Restful post在达到295个字符时抛出400个无效url,c#,web-services,rest,asp.net-web-api,C#,Web Services,Rest,Asp.net Web Api,我已经用Web Api创建了一个restful Web服务 我正试图在这个网址上发表文章 ../api/AAEAAAD_____AQAAAAAAAAAMAgAAAEVPYmplY3RUb0Jhc2U2NCwgVmVyc2lvbj0xLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABlPYmplY3RUb0Jhc2U2NC5DcmVkZW50aWFsAgAAABk8VXNlcm5hbWU-a19fQmFja2luZ0

我已经用Web Api创建了一个restful Web服务

我正试图在这个网址上发表文章

../api/AAEAAAD_____AQAAAAAAAAAMAgAAAEVPYmplY3RUb0Jhc2U2NCwgVmVyc2lvbj0xLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABlPYmplY3RUb0Jhc2U2NC5DcmVkZW50aWFsAgAAABk8VXNlcm5hbWU-a19fQmFja2luZ0ZpZWxkGTxQYXNRmllbGQBAQIAAAAGAwAAAA5hd2NhQGF0ZWEtYW5jdAYEAAAAC0czcnRtNG5zMGZ0CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2/say
base64是用

HttpServerUtility.UrlTokenEncode();
我收到一个
“HTTP错误400。请求URL无效。”
在尝试发布时

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

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

  • 正在更改web.config中的maxUrlLength
  • 在注册表中设置UrlSegmentMaxLength
到目前为止,一切都不起作用。 我发现这个神奇的数字在完整的url中是294个允许字符,意思是->如果我从长字符串中剪下一些字符,直到达到294个字符,一切都按照预期进行,就像为什么确定这不是路由问题,也不是我的post方法的问题一样

public string Post(string key)
    {
       if(ConvertFromBase64(key))
       {
       //Do stuff
       }
    }
关于这个问题有什么好主意吗

对于任何试图实现我正在尝试的目标的人- 这是我的路线

  config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{key}/{controller}/{id}",
            defaults: new { key=RouteParameter.Optional,id = RouteParameter.Optional }
            );
还有我的发帖方法

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

我知道您尝试了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 }
        );

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

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

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

不是对您问题的回答,但该标记是否应位于标题中?(身份验证令牌?)似乎是一个糟糕的url;)我没有删除它们,但是请去掉过多的标题,这并不会使文章更可读,相反,甚至更容易阅读。另外,“您尝试了什么?”并不意味着“您的代码是什么?”,而是“您尝试了什么来解决问题”。例如,看一个非常相关的问题。你似乎因为一些粗体的文字而获得了否决票。难以置信,我不明白你在“还”之后的意思,我已经删除了标题,尽管我不同意你的观点。当然,如果你在发帖子,标记应该在帖子数据中,不是URL?@AlexCarlsen我的建议是在查询字符串中传递此令牌,而不是URI的一部分,您不知道此令牌中可能包含哪些字符,并且某些字符不能作为URI的一部分。@TaiseerJoudeh我也同意这一点,除非Alex确定不会有冲突的垃圾进入其中。from MSDN:HttpServerUtility.urltokencode—“使用基本64位将字节数组编码为其等效的字符串表示形式,这可用于在URL上传输。”因此,任何垃圾都不会从中产生