1

我正在调试在同一台机器上运行在不同 Cassini 实例下的两个 ASP.NET 应用程序,并且关闭了“自定义错误”。一个应用程序在端口 100 上运行,并希望执行GET来自在端口 90 上运行的另一个应用程序的请求。因此它运行以下代码:

WebRequest request = WebRequest.Create(
   "http://localhost:90/Controller/Action?Param1=foo&Param2=bar");
request.Timeout = 10000;
request.GetResponse();

最后一行抛出WebException带有HTTP 400代码和 null InnerException。如果我在剪贴板中复制相同的 URL,将其传递到在同一台机器上运行的 IE 中 - 请求在端口 90 上排队到应用程序/Controller/Action/并被调用,甚至参数也可以正常传递。

这里的问题根源可能是什么,我该如何解决?

4

3 回答 3

1

我认为您应该尝试不使用 url 中的参数。

WebRequest request = WebRequest.Create("localhost:90/Controller/Action");
request.Timeout = 10000;
request.GetResponse();

如果它确实有效,您需要添加一些用户代理标头以允许使用参数。

你也应该看看 WebClient。 MSDN

我个人也会考虑使用 IISExpress 或 IIS 来开发这种解决方案。

这里只是一个局外人的观察,考虑通过浏览器的 ajax 调用对第二个 webmethod 进行调用,并使用 javascript (jQuery) 在客户端聚合结果。

于 2011-12-19T07:12:30.000 回答
1

我会尝试使用带有 URI 对象的 WebRequest.Create 的重载,这样您就可以排除粗手指的 URL。

于 2011-12-19T08:03:47.380 回答
0

调试了两个小时 - 结果发现端口 90 的服务会将请求重定向回端口 100 的服务,但不会在 URL 中提供必需的参数,因此端口 100 的服务中的处理程序会抛出异常并返回 HTTP 400,然后由GetResponse(). 解决方案是更改逻辑,以便此特定请求没有重定向,因为重定向对于此特定请求没有意义。

陪审团认为 Cassini 和 ASP.NET 均无罪。

于 2011-12-19T09:35:19.203 回答