我们有一个版本控制服务,应该可以通过我们的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
。有人可能会说,把它放在DELETE请求的正文中。但这个选项备受争议,所以我想从一开始就忽略这一点。
那么我做错了什么,你建议做什么?
祝你好运, 卡斯滕
答案 0 :(得分:1)
在查询字符串“?”之后才允许使用MVC中的URI中的冒号。 URL中的字符,即使它被编码为%3A。
因此,除非SVN是http / s独立的,否则你可以从代码中附加的参数中删除初始的http:。