请求在浏览器发出时处理好,但在同一台机器上由ASP.NET应用程序发出时则不行

时间:2011-12-19 07:00:43

标签: asp.net .net asp.net-mvc-3 cassini asp.net-development-serv

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

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/,甚至可以传递参数。

这里可能出现什么问题,如何解决?

3 个答案:

答案 0 :(得分:1)

我认为你应该尝试没有网址中的参数。

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

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

你也应该看看WebClient。 MSDN

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

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

答案 1 :(得分:1)

我会尝试使用overload of WebRequest.Create that takes a URI object,这样就可以排除一个胖手指的网址。

答案 2 :(得分:0)

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

陪审团认定卡西尼和ASP.NET都无罪。