【问题标题】:500 error post from another web site来自另一个网站的 500 错误帖子
【发布时间】:2012-04-02 08:13:53
【问题描述】:

我对外部网站进行 POST 请求。该站点向我返回数据,也是 POST 方法。我无法访问外部站点(它是银行)。还有一个测试页面,用于检查控制器的操作是否有效。

问题在于,当我从测试页面进行 POST 时一切正常:外部站点收到我的 POST 并将结果发回给我(控制器的操作有效),但是当我向外部站点进行 POST 时,它会收到我的 POST,但我无法收到银行的 POST。

这是 IIS 日志(第一行来自银行,第二行来自测试页面):

2012-04-02 08:00:11 82.200.165.5 POST /Home/PostLinkTest - 80 - 193.93.56.223 Java/1.6.0_31 500 0 0 31

2012-04-02 08:01:58 82.200.165.5 POST /Home/PostLinkTest - 80 - 2.133.42.201 Mozilla/5.0+(Windows+NT+6.1;+WOW64;+rv:11.0)+Gecko/20100101+Firefox/11.0 200 0 0 227 

更新:
这是行动:

[HttpPost]
        public ActionResult PostLinkTest()
        {

            StreamWriter erFile = new StreamWriter(Path.Combine(Server.MapPath("~"), "\\error\\error.txt"), true);

            string strTimeStamp = DateTime.Now.ToString("dd MMM yyyy HH:mm");
            erFile.WriteLine("Date " + strTimeStamp);
            erFile.WriteLine("------------------------");
            erFile.WriteLine("PostLinkTest ");
            erFile.WriteLine("------------------------ X -------------------------");
            erFile.Close();   

            return View("ShowResponse");

        }

更新 2::试图捕捉错误:

void Application_Error(object sender, EventArgs e)
       {
           var error = Server.GetLastError();
           StreamWriter erFile = new StreamWriter(Path.Combine(Server.MapPath("~"), "\\error\\error.txt"), true);

           string strTimeStamp = DateTime.Now.ToString("dd MMM yyyy HH:mm");
           erFile.WriteLine("Date " + strTimeStamp);
           erFile.WriteLine("------------------------");
           erFile.WriteLine("ApplicationError: " + error.Message + "\n" + error.StackTrace);
           erFile.WriteLine("------------------------ X -------------------------");
           erFile.Close();
        }

更新 3:
我启用了跟踪,结果如下。这是截图: 谢谢。
PS。 IIS 7.5 版本。

【问题讨论】:

    标签: asp.net-mvc post


    【解决方案1】:

    由于您没有提供有关您的网站如何运作的任何详细信息,我们只能在这里猜测。所以这是我的猜测:您的控制器操作取决于某些 Session 或用户特定的东西,当您创建一个示例页面来测试 POST 请求并在 Web 浏览器中执行它时,它起作用了,因为您是从当前用户的上下文中执行的,但是当外部网站对您的操作执行 POST 请求时,它失败了,因为它没有与任何用户关联(它没有发送会话 cookie),并且您的控制器操作在您尝试访问数据时崩溃。因此,在您的控制器操作中添加一些日志记录,看看来自外部网站的请求与您手动制作的请求有何不同。

    【讨论】:

    • 谢谢。操作非常简单(在文件中写入一些文本)。我更新了我的问题。
    • 试着让它更简单,看看它是否有效:[HttpPost] public ActionResult PostLinkTest() { return Content(DateTime.Now.ToString("dd MMM yyyy HH:mm")); }。您是否还有一些可能正在执行的自定义操作过滤器(全局或非全局)?查看服务器的事件日志。当在 ASP.NET 中引发未处理的异常时,它将在那里被跟踪。因此,如果出现 HTTP 500 状态代码,您可能会在 Web 服务器的事件日志中获得有关该错误的更多详细信息。
    • 我试过这个,但结果是一样的。不,我没有任何操作过滤器
    • 好的,那么您在事件日志中看到了什么?导致此 500 错误的异常是什么?另一种可能性是您订阅 Global.asax 中的 Application_Error 回调并跟踪错误。 500 HTTP 状态代码很可能是由您必须尝试记录的应用程序中的某些异常引起的。
    • 在事件日志中没有任何错误。我现在将尝试Application_Error 并报告结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多