我用Web-Api创建了一个安静的Web服务.
我正试图在这个网址上发帖子
../api/AAEAAAD_____AQAAAAAAAAAMAgAAAEVPYmplY3RUb0Jhc2U2NCwgVmVyc2lvbj0xLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABlPYmplY3RUb0Jhc2U2NC5DcmVkZW50aWFsAgAAABk8VXNlcm5hbWU-a19fQmFja2luZ0ZpZWxkGTxQYXNrmllbGQBAQIAAAAGAwAAAA5hd2NhQGF0ZWEtYW5jdAYEAAAAC0czcnRtNG5zMGZ0CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2/say
base64编码为
HttpServerUtility.UrlTokenEncode();
我收到“HTTP错误400.请求URL无效.”当试图做一个帖子.
我已经尝试过设置maxUrlLength,因为我看到其他几个有同样类型的问题,唉,这没有帮助.
到目前为止,我已经尝试过了
>在web.config中更改maxUrlLength.
>在Registry中设置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 } }
解决方法
尝试使用查询字符串中的键代替?
public class SomeController : Controller [Route("api/say")] public ActionResult Say(string key) { }
跟网址一样
../api/say?key=AAEAAAD_____AQAAAAAAAAAMAgAAAEVPYmplY3RUb0Jhc2U2NCwgVmVyc2lvbj0xLjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPW51bGwFAQAAABlPYmplY3RUb0Jhc2U2NC5DcmVkZW50aWFsAgAAABk8VXNlcm5hbWU-a19fQmFja2luZ0ZpZWxkGTxQYXNrmllbGQBAQIAAAAGAwAAAA5hd2NhQGF0ZWEtYW5jdAYEAAAAC0czcnRtNG5zMGZ0CwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2