带有MVC 5的DELETE请求URI中的URI

时间:2016-08-26 05:26:49

标签: c# asp.net-mvc

我们有一个版本控制服务,应该可以通过我们的REST API访问。其中一个操作允许删除SVN中的目录。理想情况下,我想发送一个DELETE请求,其中包含要删除的目标的URI,如下所示:http://service:4711/directory/http%3A%2F%2Fsome%2Fdirectory

发生的事情并不新鲜,而且有很多答案。不幸的是,他们不适合我。根据我的尝试,我得到404或403(由于恶意冒号)。

让我向您展示一些代码以及到目前为止我没有成功的尝试:

// The action in my controller
[HttpDelete]
[Route("directory/{uri}/")]
public void DeleteDirectory(string uri)
{
    var x = HttpUtility.UrlDecode(uri);
}

我正在使用MVC版本5.2.3.0。

我试过了:

  • [System.Web.Mvc.ValidateInput(false)]关于行动和/或班级。
  • runAllManagedModulesForAllRequests="true"
  • 中设置web.config
  • requestPathInvalidCharacters=""
  • 中设置web.config
  • requestValidationMode="true"
  • 中设置web.config

现在,我看到了四种可能的解决方案:

  • 我以前的方法做错了。
  • 我必须创建自定义RequestValidator
  • 我必须对请求中的URI进行双重编码。
  • 发送POST请求而不是删除。

有人可能会说,把它放在DELETE请求的正文中。但这个选项备受争议,所以我想从一开始就忽略这一点。

那么我做错了什么,你建议做什么?

祝你好运,    卡斯滕

1 个答案:

答案 0 :(得分:1)

在查询字符串“?”之后才允许使用MVC中的URI中的冒号。 URL中的字符,即使它被编码为%3A。

因此,除非SVN是http / s独立的,否则你可以从代码中附加的参数中删除初始的http:。