【问题标题】:Unable to pass a URL in GET request to a RESTful web service in C#无法将 GET 请求中的 URL 传递给 C# 中的 RESTful Web 服务
【发布时间】:2013-05-10 03:28:24
【问题描述】:

我在项目中遇到了一个意外问题。问题是我的代码中有一个动态生成的 URL,我必须通过 GET 请求将其提交给 RESTful Web 服务。例如要提交的 URL 如下所示:http://mysampleserver.com:8080/calc/8999/bpaX

RESTful 服务器接受 URL 作为其最后一个参数,格式如下:

http://myRestfulAPI.domainname.com/capture/bbbb/http://mysampleserver.com:8080/calc/8999/bpaX

我还使用 System.Net.HttpUtility.UrlEncode(....) 首先对“要提交的 URL”进行编码,以将其合并到 RESTful 服务调用中。

这导致出现以下错误:

System.Web.HttpException:从客户端检测到潜在危险的 Request.Path 值 (:)

为了尝试解决它,我关注了the steps described per this web page,但没有运气。

我正在使用 MVC 4 在 C# 中实现 RESTful API。

有任何线索或想法可以解决这个令人瞩目的问题吗?

【问题讨论】:

  • Base64 编码 URL 字符串,也许?
  • Uri.EscapeDataString() 应该做得更好。我过去遇到过HttpUtility.UrlEncode 没有正确编码所有字符的问题。见stackoverflow.com/questions/602642/…。此外,您可以尝试在查询字符串中附加编码的 url,在另一个 url 中嵌入一个 url 似乎有问题。

标签: c# .net asp.net-mvc asp.net-mvc-4 restful-url


【解决方案1】:

我能想到的解决方案至少有两种。

  1. 将您的 RESTFul 服务更改为使用 post,因为您将信息发送到您的服务器,并且可能会更改您的资源状态,基于 HTTP 协议,您无论如何都应该使用 POST。
  2. 您还可以使用 Base64 对您的网址进行编码

【讨论】:

    【解决方案2】:

    您尝试的步骤是正确的。另请参阅此问题potentially dangerous...,这是同一个问题。

    默认情况下,.NET 不允许在 URL 中包含许多字符,: 就是其中之一(至少作为查询字符串)。它们是“潜在危险的”。对配置文件进行此更改允许将这些字符传递给您的应用程序。

    【讨论】:

      【解决方案3】:

      您需要对查询字符串(mvc 参数)中的 url 进行 Url.Encode,否则它将被解释为更多 URL 编码,以便 MVC 解码为参数。尝试类似 @Url.Encode(yourStringObject) 并将其作为最后一个值或作为查询传递(即 &q=url)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-27
        • 1970-01-01
        • 1970-01-01
        • 2018-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多