Asp.net mvc3 C#,跟踪500错误响应消息?

Asp.net mvc3 C#,跟踪500错误响应消息?,c#,asp.net,httpwebresponse,C#,Asp.net,Httpwebresponse,我需要从HttpWebResponse获取500错误响应消息 HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse(); using (StreamReader responseStream = new StreamReader(objResponse.GetResponseStream())) { post_response = responseStream.ReadToEnd();

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

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

谢谢大家!

[编辑]

使用浏览器打开此url

浏览器将打印响应消息“缺少参数: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()
var post\u 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数据作为流发送
StreamWriter myWriter=null;
myWriter=newstreamwriter(objRequest.GetRequestStream());
myWriter.Write(post_字符串);
myWriter.Close();
//返回的值作为流返回,然后读入字符串
尝试
{
HttpWebResponse objResponse=(HttpWebResponse)objRequest.GetResponse();
使用(StreamReader responseStream=newstreamreader(objResponse.GetResponseStream())
{
post_response=responseStream.ReadToEnd();
responseStream.Close();
}
响应。写入(post_响应);
}
捕获(WebE例外)
{   
响应。写入(“错误:+e.Message”);
响应。写入(“
数据:“+e.Data”); 写(“
HelpLink:+e.HelpLink”); 写(“
InnerException:”+e.InnerException); 响应。写入(“
响应:”+e.Response); 响应。写入(“
源:“+e.Source”); 响应。写入(“
状态:“+e.Status”); 回答。写(“
TargetSite:+e.TargetSite”); } 结果: 错误:远程服务器返回错误:(500)内部服务器错误。 数据:System.Collections.ListDictionaryInternal 帮助链接: 内部异常: 响应:System.Net.HttpWebResponse 资料来源:系统 状态:协议错误 TargetSite:System.Net.WebResponse GetResponse()
如何获取此消息


缺少参数:M_ID。

除非您打开了自定义错误,否则HTTP错误将在IIS级别处理。请参阅此文章,了解如何更改web配置以添加您自己的自定义错误页:

这个问题:


…还特别介绍了如何抛出500以及如何再次执行客户错误。它还包括一点关于
上下文.Response.TrySkipIisCustomErrors
的内容,这是公认的答案。

HTTP错误是在IIS级别处理的,除非您打开了自定义错误。请查看这篇关于如何更改web配置的文章o添加您自己的自定义错误页:

这个问题:


…还特别介绍了如何抛出500以及如何再次执行客户错误。它还包括一点关于
上下文.Response.TrySkipIisCustomErrors
,这是公认的答案。

如果在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
    }
}

我认为如果在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
    }
}

在我的情况下,这是工作。希望能对你有所帮助

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);
    }
}

在我的情况下,这是工作。希望能对你有所帮助

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);
    }
}

谢谢您的回答,但我仍然无法解决我的问题。请您再次查看我编辑的问题好吗?@ExpertWannab-如果您查看我的示例,您将看到我已将抛出的异常的Response属性强制转换为HttpWebResponse。这使您可以访问StatusCode和StatusDescription属性,这些属性将为您提供这是你在更新的问题示例中遗漏的一点。(我在回答中突出显示了相关行)谢谢您的回答,但我仍然无法解决我的问题。请您再次查看我编辑的问题好吗?@ExpertWannab-如果您查看我的示例,您将看到我已将抛出的异常的Response属性强制转换为HttpWebResponse。这使您可以访问StatusCode和StatusDescription属性,这些属性将为您提供这是你在更新的问题示例中遗漏的一点。(我在回答中突出显示了相关行)我已将HttpContext.Reponse.TrySkipIisCustomErrors添加到方法的顶部,但仍然无法获取响应消息。请再次查看我编辑的问题好吗?您是否尝试了此错误中的代码以及TrySkipIisCustomErrors属性?我已将HttpContext.Reponse.TrySkipIisCustomErrors添加到方法的顶部,但我仍然无法获取响应消息。请再次查看我编辑的问题,好吗?您是否将此错误中的代码与TrySkipIisCustomErrors属性一起尝试?