【问题标题】:URL as param in RESTfull Service in .NetURL 作为 .Net 中 RESTful 服务中的参数
【发布时间】:2017-11-03 14:27:54
【问题描述】:

我正在尝试将 URL 作为 REST 服务中的参数传递。

请求: https://LocalHost/api/InsertUrl/{Type},{URL},{Notes} https://LocalHost/api/InsertUrl/External,https://www.amazon.com,RANDOM注意

示例代码:

[HttpPost]
[Route("api/InsertUrl/{Type},{URL},{Notes}")]
public bool SetUrl(string Type, string URL, string Notes)
{

    bool Status = repository.SetupUrl(Type, URL, Notes);
    return Status ;

}

使用 POSTMAN (with POST) 来测试我得到的这个端点:: 404 - 找不到文件或目录。 您要查找的资源可能已被删除、名称已更改或暂时不可用。

我在这里做错了什么?

【问题讨论】:

  • 您是否尝试过使用 POST 方法? GET 方法不适用于此
  • 然后,一些黑客使用恶意 URL 调用您的 URL。 为什么你要这样传递 URL?
  • [HttpPost]。这不是 GET 方法,这是 POST。 GET 应该获取 资源,而不是进行更改。您应该从 Route 属性中删除参数并更改您的客户端代码以将所有内容作为 POST 参数发送

标签: c# .net api restful-url


【解决方案1】:

IIS 不喜欢 URL 中的点,认为如果它是文件扩展名,则必须通过另一个模块。

为避免这种情况,您可以通过您的应用程序路由所有请求:

 <configuration>
    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true" />

这个问题其实已经在另一个帖子here中回答了。

【讨论】:

  • 这个限制有一个非常有效的安全原因。另一个安全风险:黑客将恶意 URL 传递给服务
  • 此外,OP已经将该方法标记为HttpPost。该方法本身会进行更改,因此它首先不应该是 GET
猜你喜欢
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 1970-01-01
  • 2015-05-28
  • 2018-06-17
  • 2012-08-22
相关资源
最近更新 更多