REST webservice“错误请求”

时间:2012-03-06 07:45:04

标签: c# web-services rest

我正在编写一个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时,我得到了一个 Errore HTTP 400 - 错误请求。

如果我使用

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

并致电basurl/Test/prova?p2=te%25st它有效 为什么?我能做些什么让第一个语法工作?

更新
用可能的解决方案看看我的答案 如果有人发现更好的,请发贴!! 感谢

1 个答案:

答案 0 :(得分:1)

谷歌搜索我刚发现这个链接: 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,我得到了什么回应   server是Bad Request异常。原因是%25是%   ASP.NET中的无效URL路径字符的字符。不管你   可以在查询字符串中使用这些字符。

     

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

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

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

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