C# httpwebrequest异常处理中出错

C# httpwebrequest异常处理中出错,c#,httpwebrequest,httpwebresponse,C#,Httpwebrequest,Httpwebresponse,我正在向API发布JSON数据。如果我发布了错误的数据,catch块没有捕获错误。使用(httpResponse=(HttpWebResponse)httpWebRequest.GetResponse())此点停止控件,并显示错误。我做错了什么。 下面是我的代码 try { ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCer

我正在向API发布JSON数据。如果我发布了错误的数据,
catch
块没有捕获错误。使用(httpResponse=(HttpWebResponse)httpWebRequest.GetResponse())此点停止控件,并显示错误。我做错了什么。 下面是我的代码

try
        {

            ServicePointManager.ServerCertificateValidationCallback = new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
            var httpWebRequest = (HttpWebRequest)WebRequest.Create("ipaddress");
            httpWebRequest.Credentials = new NetworkCredential("", "");
            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method = "POST";

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                string name = objTSPost.name;
                string servicetype = objTSPost.service_type;
                string json = "{\"name\":\"VMR_" + name + "\"," +
                              "\"service_type\":\"" + servicetype + "\"}";

                streamWriter.Write(json);
                streamWriter.Flush();
                streamWriter.Close();
            }


            using (httpResponse = (HttpWebResponse)httpWebRequest.GetResponse())
            {
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();
                }
                string str = "{\"name\":\"VMR_" + objTSPost.name + "\"," +
                                  "\"service_type\":\"" + objTSPost.service_type + "\"}";
                var data = JsonConvert.DeserializeObject<TSGetRootObject>(str);
                data.status = ((HttpWebResponse)httpResponse).StatusDescription;
                return data;
            }

        }
        catch (WebException ex)
        {
            objTSPost.status = ex.Message;
            return objTSPost;
        }

    }
试试看
{
ServicePointManager.ServerCertificateValidationCallback=new System.Net.Security.RemoteCertificateValidationCallback(AcceptillCertifications);
var httpWebRequest=(httpWebRequest)WebRequest.Create(“ipaddress”);
httpWebRequest.Credentials=新网络凭据(“,”);
httpWebRequest.ContentType=“应用程序/json”;
httpWebRequest.Method=“POST”;
使用(var streamWriter=newstreamwriter(httpWebRequest.GetRequestStream()))
{
字符串名称=objTSPost.name;
字符串servicetype=objTSPost.service\u类型;
字符串json=“{\'name\”:\“VMR\”+名称+“\”,“+
“\”服务类型\“:\”+servicetype+“\”}”;
streamWriter.Write(json);
streamWriter.Flush();
streamWriter.Close();
}
使用(httpResponse=(HttpWebResponse)httpWebRequest.GetResponse())
{
使用(var streamReader=newstreamreader(httpResponse.GetResponseStream())
{
var result=streamReader.ReadToEnd();
}
string str=“{\'name\”:\“VMR\”+objTSPost.name+“\”,“+
“\”服务类型“:\”“+objTSPost.service类型+“\”}”;
var data=JsonConvert.DeserializeObject(str);
data.status=((HttpWebResponse)httpResponse).StatusDescription;
返回数据;
}
}
捕获(WebException ex)
{
objTSPost.status=ex.Message;
返回objTSPost;
}
}

Sachin是正确的,您应该处理从最特定异常到最不特定异常的异常

此外,将异常消息传播给用户不是一个好的做法,因为它可能会暴露安全漏洞,因此我建议您记录实际的消息,并传播一条标准的用户友好消息。也许你是在方法返回它的值后才这样做的,但是由于其余的代码不可用,我只想给你一个提示

    try
    {

        //My maybe not toally reliable code

    }
    catch (WebException ex)
    {
        LogMessage(ex.Message);
        objTSPost.status = "My custom userfriendly specific web exception message";
        return objTSPost;
    }
    catch(Exception ex)
    {
        LogMessage(ex.Message);
        objTSPost.status = "My custom userfriendly unhandled exception message";
        return objTSPost;
    }

你能发布一些关于你得到的错误的细节吗?消息,异常的类型?如果catch未捕获,请使用更通用的异常,而不是WebException。您仅捕获WebException类型的异常。它可能会抛出其他类型的异常,这就是它没有被捕获的原因。我建议,您应该添加另一个泛型类型为“Exception”的catch块。类似于此捕获(异常ex){objTSPost.status=ex.Message;return objTSPost;}以下错误我得到“System.dll中发生了未处理的'System.Net.WebException'类型的异常附加信息:远程服务器返回了一个错误:(400)错误请求。”如何处理这些类型的错误感谢@JFM为您提供宝贵的建议。