将DELETE谓词发送到ASP.NET Web API时,为什么会得到400 BAD REQUEST?

时间:2012-12-09 00:02:57

标签: http rest asp.net-mvc-4 asp.net-web-api

我的路线看起来像:

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>

1 个答案:

答案 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

默认情况下看起来可能存在路径段限制,但有几种解决方法(网址重写,注册表更改等)