REST Web服务”;错误的请求”;

本文关键字:请求 错误 Web REST 服务 | 更新日期: 2023-09-27 18:26:44

我正在编写一个REST Web服务,它的方法如下:

[WebGet(
    UriTemplate = "/Test/{p1}/{p2}",
    BodyStyle = WebMessageBodyStyle.Bare,
    ResponseFormat = WebMessageFormat.Xml)]
public string Test(string p1, string p2)
{
    // Do something here
}

因此,如果我调用basurl/Test/prova/test,我的方法Test会用p1="prova"p2="test"来调用,一切都很好
当我尝试使用具有(例如)%字符的参数时会出现问题:即使在URL代码中翻译它,当我尝试调用basurl/Test/prova/te%25st时,我也会得到
错误HTTP 400-错误的请求。

如果我使用

[WebGet(
    UriTemplate = "/Test/{p1}?p2={p2}",
    BodyStyle = WebMessageBodyStyle.Bare,
    ResponseFormat = WebMessageFormat.Xml)]
public string Test(string p1, string p2)
{
    // Do something here
}

并调用CCD_ 4工作
为什么?我该怎么做才能让第一个语法正常工作?

更新:
看看我的答案和可能的解决方案
如果有人找到更好的,请把它贴出来
感谢

REST Web服务”;错误的请求”;

在谷歌上搜索我刚刚发现了这个链接:http://weblogs.asp.net/imranbaloch/archive/2010/04/23/understanding-400-bad-request-exception.aspx他们说:

ASP.NET限制:

在通过内核模式http.sys强制执行的限制后,请求将被移交给IIS,然后再移交给ASP.NET引擎,然后再次请求必须通过ASP.NET,以便成功完成它。

ASP.NET只允许URL路径长度为260个字符(例如,仅允许路径http://a/b/c/d,这里的路径是从a到d)。这意味着如果你有包含261个字符的长路径,那么你将获得Bad Request异常。这是由于NTFS文件路径限度

另一个限制是URL路径部分可以使用哪些字符。除某些字符外,您可以使用任何字符因为它们在路径中被称为无效字符。下面是一些URL的路径部分中的这些无效字符,<,>,*,%&,:,''。要确认这一点,只需右键单击解决方案资源管理器并添加新建文件夹并将此文件命名为上述任何字符,您将收到消息。文件或文件夹不能为空字符串,也不能为空仅包含"."或具有以下任何字符。。。。。

为了检查上述情况,我创建了一个Web应用程序,并将Default.aspx放在a%a文件夹中(从windows资源管理器),然后导航到,http://localhost:1234/A%25A/Default.aspx,我得到的回应服务器是Bad Request异常。原因是%25就是%字符,该字符在ASP.NET中是无效的URL路径字符。但是您可以在查询字符串中使用这些字符。

这些限制的原因是出于安全考虑,例如,在%的帮助下,您可以对URL路径部分进行双重编码和:用于从服务器获取一些特定的资源。

所以我开始认为我的问题是不可能解决的
我确信这个问题在一些用PHP编写并用Apache托管的REST Web服务中并不存在,所以我认为这只是IIS/ASP的"安全"限制,我找不到解决方法。。。

更新最终解决方案:
我在这里找到了一个解决方案:阅读文章,了解一切
你应该知道它可能有风险,所以在使用它之前要好好考虑

<system.web>
  <httpRuntime requestPathInvalidCharacters="" />
  <pages validateRequest="false" />
</system.web>