向 Cassini Web 服务器发送请求 URI 为“/”的 POST 请求,导致 405 错误。为啥?

Posted

技术标签:

【中文标题】向 Cassini Web 服务器发送请求 URI 为“/”的 POST 请求,导致 405 错误。为啥?【英文标题】:Sending a POST request with the request URI of '/' to the Cassini Web Server leading to a 405 error. Why?向 Cassini Web 服务器发送请求 URI 为“/”的 POST 请求,导致 405 错误。为什么? 【发布时间】:2011-03-11 05:40:19 【问题描述】:

我使用 HTTPWebRequest 从客户端向配置为接受远程请求的远程计算机上的 Cassini Web 服务器发送 POST 请求。但是,我没有将文件指定为 URL 的一部分。我将请求直接发送到服务器,如“http://172.34.142.12:8080/”。但是,我无法收到正确的响应并收到“405 Method not allowed”错误。我正在使用卡西尼 3.5。关于为什么会发生这种情况的任何建议?

【问题讨论】:

只是为了确认您的意思-从同一个远程主机到同一个 url 的 GET 调用工作正常吗?另外,如果您在同一台机器上,POST 调用是否有效?我注意到对 Cassini 的 POST 和 PUT 调用对我来说也失败了,但我从来没有深究原因(这些是到 localhost,所以可能是一个不相关的原因) 我没有尝试过 GET。但是,即使在同一台机器上,POST 也不起作用。我仍然遇到同样的问题。我需要使用 POST,因为我是直接向服务器发送数据,而在服务器端,我已经修改了 Cassini 来处理发送的数据,比如根据数据创建一个新进程。 确认:在修改代码并使用它之后,它可以与 GET(在远程机器上)一起使用。但是,正如詹姆斯所说,我无法使用 POST 来做到这一点。 【参考方案1】:

Cassini 被硬编码为不接受来自运行它的主机以外的任何主机的请求。出于安全原因,它以这种方式编程。

如果您确实需要此功能,则必须构建您自己的版本。有一些关于如何做到这一点的演练,here's one。

【讨论】:

我使用的版本是这个,它也接受远程请求:blogs.msdn.com/b/dmitryr/archive/2008/10/03/…【参考方案2】:

我的公司生产一种名为 Neokernel 的产品,它可能会对您有所帮助:www.neokernel.com

Neokernel 不是基于 Cassini。它是一个专业的、可嵌入的 ASP.NET Web 服务器,位于一个小型、自包含的程序集中,具有日志记录、SSL、对多个 ASP.NET 应用程序的支持、编程配置、对虚拟目录的支持,并且它运行 IIS 运行的任何 Web 应用程序。它也适用于 Mono 框架;我们开发它是因为 Cassini 存在许多问题(以及由此衍生的各种项目)。

【讨论】:

以上是关于向 Cassini Web 服务器发送请求 URI 为“/”的 POST 请求,导致 405 错误。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

Apollo 客户端向错误的 uri 发送请求

无法使用javascript向ASP.NET web api Controller发送http POST请求

在web前端怎么发送http协议的put delete请求

如何响应 RESTful Web 服务中的备用 URI

HTTP协议解析

web请求除了get和post还都有哪些方式?