【问题标题】:Why am I getting 400 BAD REQUEST when sending DELETE verb to ASP.NET Web API?为什么在向 ASP.NET Web API 发送 DELETE 动词时收到 400 BAD REQUEST?
【发布时间】:2012-11-26 19:44:30
【问题描述】:

我的路线如下:

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>

【问题讨论】:

  • 你是如何正确格式化的?
  • 你使用了encodeURIComponent吗? developer.mozilla.org/en-US/docs/JavaScript/Reference/…
  • @JayC 是的,非法字符被替换了。我检查了传出的 HttpRequest 并确认参数中只有字母数字字符。请注意,我的请求在使用查询字符串时有效,但在使用 RESTful 路径参数时无效。

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


【解决方案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

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

【讨论】:

  • 感谢您的回复。不幸的是,我已经浏览了所有这些链接,并且解决方法不适合我的问题。更改 Web 服务器的行为是不可能的,因为它托管在 Azure 中。
  • 怎么样? Azure 似乎支持 URL 重写。 msdn.microsoft.com/en-us/library/windowsazure/dd573358.aspx。我希望你需要做的就是在你的网络配置中添加几行。我从未使用过 Azure 服务,但只要在 IIS 中为任何云实例安装了 URL 重写模块,为应用程序添加重写规则通常就像修改应用程序的 Web 配置文件一样简单。
  • 谢谢,我会调查的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多