【问题标题】:Asp.net mvc3 C#, trace 500 error response message?Asp.net mvc3 C#,trace 500错误响应信息?
【发布时间】:2012-06-18 21:31:23
【问题描述】:

我需要从 HttpWebResponse 获取 500 错误响应消息。

HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
using (StreamReader responseStream = new StreamReader(objResponse.GetResponseStream()))
{
      post_response = responseStream.ReadToEnd();
      responseStream.Close();
}

谢谢!

[编辑]

用浏览器打开这个网址,

https://www.sagepayments.net/web_services/vterm_extensions/transaction_processing.asmx/BANKCARD_PRIOR_AUTH_SALE

浏览器将打印响应消息,“缺少参数:M_ID。”

现在,我想使用 asp.net 获取响应消息

var post_string = "hello=hi";

HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create("https://www.sagepayments.net/web_services/vterm_extensions/transaction_processing.asmx/BANKCARD_PRIOR_AUTH_SALE");
    objRequest.Method = "POST";
    objRequest.ContentLength = post_string.Length;
    objRequest.ContentType = "application/x-www-form-urlencoded";

    // post data is sent as a stream
    StreamWriter myWriter = null;
    myWriter = new StreamWriter(objRequest.GetRequestStream());
    myWriter.Write(post_string);
    myWriter.Close();

    // returned values are returned as a stream, then read into a string

    try
    {
    HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
    using (StreamReader responseStream = new StreamReader(objResponse.GetResponseStream()))
    {
        post_response = responseStream.ReadToEnd();
        responseStream.Close();
    }

    Response.Write(post_response);
    }
    catch(WebException e)
    {   
    Response.Write("Error : "+e.Message); 
    Response.Write("<br /> Data : " + e.Data);
    Response.Write("<br /> HelpLink : " + e.HelpLink);
    Response.Write("<br /> InnerException : " + e.InnerException);
    Response.Write("<br /> Response : " + e.Response);
    Response.Write("<br /> Source : " + e.Source);
    Response.Write("<br /> Status : " + e.Status);
    Response.Write("<br /> TargetSite : " + e.TargetSite);
    }


Result : 
Error : The remote server returned an error: (500) Internal Server Error.
Data : System.Collections.ListDictionaryInternal
HelpLink :
InnerException :
Response : System.Net.HttpWebResponse
Source : System
Status : ProtocolError
TargetSite : System.Net.WebResponse GetResponse()

如何获取此消息?

缺少参数:M_ID。

【问题讨论】:

    标签: c# asp.net httpwebresponse


    【解决方案1】:

    如果在 Web 请求期间抛出异常,我认为您需要检查 Web 响应的 StatusCode 和 StatusDescription 属性。

    例如:

    try
    {
        HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
        using (StreamReader responseStream = new StreamReader(objResponse.GetResponseStream()))
        {
            post_response = responseStream.ReadToEnd();
            responseStream.Close();
        }
    }
    catch(WebException wex)
    {
        // This is the line that gets you the response object
        HttpWebResponse response = (HttpWebResponse)wex.Response;
    
        if(response != null)
        {
            // You can now read the response StatusCode and StatusDescription
            HttpStatusCode responseCode = response.StatusCode;
            String statusDescription = response.StatusDescription;
    
            // Add your status checking logic here
        }
    }
    

    【讨论】:

    • 感谢您的回答,但我仍然无法解决我的问题。请您再次查看我编辑的问题吗?
    • @Expertwannabe - 如果您查看我的示例,您会发现我已将抛出的异常的 Response 属性转换为 HttpWebResponse。这使您可以访问应为您提供所需内容的 StatusCode 和 StatusDescription 属性。这是您在更新的问题示例中缺少的部分。 (我在答案中突出显示了相关行)
    【解决方案2】:

    除非您打开了自定义错误,否则在 IIS 级别处理 HTTP 错误。查看这篇文章,了解如何更改您的网络配置以添加您自己的自定义错误页面:Returning 404 Error ASP.NET MVC 3

    这个问题: How to send a Status Code 500 in ASP.Net and still write to the response?

    ...还特别介绍了如何抛出 500 以及如何处理客户错误。它还包括一些关于Context.Response.TrySkipIisCustomErrors 的内容,这是公认的答案。

    【讨论】:

    • 我将 HttpContext.Reponse.TrySkipIisCustomErrors 添加到方法的顶部,但仍然无法获得响应消息。请您再次查看我编辑的问题吗?
    • 您是否尝试结合 TrySkipIisCustomErrors 属性尝试此错误中的代码? stackoverflow.com/a/4496012/590783
    【解决方案3】:

    这在我的情况下有效。希望对你有帮助。

    try
    {
        response = (HttpWebResponse)request.GetResponse();
        using (StreamReader streamReader = new StreamReader(response.GetResponseStream()))
        {
            responseMessage = streamReader.ReadToEnd();
            Assert.IsTrue(response.StatusCode == HttpStatusCode.OK);
            response.Close();
        }
    }
    catch(WebException ex)
    {
        using (StreamReader streamReader = new StreamReader(ex.Response.GetResponseStream()))
        {
            responseMessage = streamReader.ReadToEnd();
            File.WriteAllText(@"C:\Users\Paul\Documents\text.txt", responseMessage);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2018-09-30
      • 2021-03-31
      相关资源
      最近更新 更多