我的路线看起来像:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}/{uri}",
defaults: new { id = RouteParameter.Optional, uri = RouterParameter.Optional }
);
我发送了一个Base64编码的uri来代替{uri}参数。它没有非法字符(我已正确格式化并检查以确保)。但是,它长约300-400个字符。
当我使用long base64参数向此地址发送DELETE请求时,我得到400 BAD STATUS,INVALID URL响应。缩短参数时,它可以工作。我怀疑存在最大路径问题?
使用查询字符串代替路径参数有效,但我宁愿继续使用RESTful方法。是否有配置设置我可以在我的Web API项目上更改以允许更长的基于路径的参数?
这有效:
http://localhost:99999/api/reg/10?uri=<long_base64_parameter>
这不起作用:
http://localhost:99999/api/reg/10/<long_base64_parameter>
答案 0 :(得分:1)
看起来这些是相关的:
The request URL is invalid in IIS 7
ASP.NET MVC, Url Routing: Maximum Path (URL) Length
另见:
http://social.msdn.microsoft.com/Forums/nl/netfxnetcom/thread/723e6bfd-cab7-417b-b487-67f1dcfa524f
默认情况下看起来可能存在路径段限制,但有几种解决方法(网址重写,注册表更改等)