如何使用C#处理401错误响应?

如何使用C#处理401错误响应?,c#,asp.net,json,exception-handling,http-status-code-401,C#,Asp.net,Json,Exception Handling,Http Status Code 401,我有一个API,它返回json响应。 当我从Fiddler调用API时,它会给我json响应 如下图所示: JSON响应: 从网页调用API: protected void FinalCall() { // try // { string url = txtdomainURL.Text.Trim(); string apiname = txtAPIname.Text.Trim();

我有一个
API
,它返回
json响应
。 当我从
Fiddler
调用
API
时,它会给我
json响应
如下图所示:

JSON响应:

从网页调用API:

protected void FinalCall()
    {

       // try
       // {
            string url = txtdomainURL.Text.Trim(); 
            string apiname = txtAPIname.Text.Trim();
            string apiURL = apiname+"/"+txtStoreID.Text.Trim()+"/"+txtSerialNo.Text.Trim(); //"duediligence/1/45523354232323424";// 990000552672620";//45523354232323424";
            //duediligence/1/45523354232323424 HTTP/1.1
            string storeID = txtStoreID.Text.Trim();//Test Store ID:1 Live Store ID: 2
            string partnerID = txtPartnerID.Text.Trim();// "1";
            string scretKey = txtSecretKey.Text.Trim();// "234623ger787qws3423";
            string requestBody = txtRequestBody.Text.Trim(); //"{\"category\": 8}";
            string data = scretKey + requestBody;


            string signatureHash = SHA1HashStringForUTF8String(data);
            lblSignatureHash.Text = signatureHash;
            String userName = partnerID;
            String passWord = signatureHash;
            string credentials = userName + ":" + passWord;//Convert.ToBase64String(Encoding.ASCII.GetBytes(userName + ":" + passWord));
            var dataString = JsonConvert.SerializeObject(requestBody); //JsonConvert.SerializeObject(requestBody);
            var bytes = Encoding.Default.GetBytes(dataString);


            WebClient client = new WebClient();
            string base64 = Convert.ToBase64String(Encoding.ASCII.GetBytes(credentials));
            client.Headers[HttpRequestHeader.Authorization] = "Basic " + Convert.ToBase64String(Encoding.ASCII.GetBytes(credentials));
            lblBase64.Text = base64;

            client.Headers.Add(HttpRequestHeader.Accept, "application/json");
            client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
            //string response = cli.UploadString(url + apiURL, dataString); //"{some:\"json data\"}"
            string completeURLRequest = url + apiURL;

            //I GET ERROR HERE 
            var result = client.DownloadString(completeURLRequest);
            //CODE below this line is not executed

            //Context.Response.TrySkipIisCustomErrors = true;
            var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            var jsonObject = serializer.DeserializeObject(result.ToString());
            //var result1 = client.UploadData(completeURLRequest, "POST", bytes);
            Response.Write(result);
            txtwebresponse.Text = jsonObject.ToString();
        //}
现在,当从网页执行相同的操作时,它会抛出
exeception
'401未授权异常'
。因此,我不想显示错误页面,而是想读取返回的
JSON
错误响应(如在fiddler中)并向用户显示

谢谢你的帮助

改编自:


稍微改变了SilentTremor的回答。结合using语句可以使代码稍微短一点

 catch (WebException ex)
 {
            HttpWebResponse httpResponse = (HttpWebResponse)ex.Response;
            using (WebResponse response = ex.Response)
            using (Stream data = response.GetResponseStream())
            using (StreamReader reader = new StreamReader(data))
            {
                string errorMessage = reader.ReadToEnd();
            }
 }

你好@SilentTremor,谢谢你的回复。它工作得很好。。!请将其作为答案发布,以获得积分/升级票…!)<代码>401不是例外,它是响应
未经授权的
请求的一个CChalrange。可能存在重复的
 catch (WebException ex)
 {
            HttpWebResponse httpResponse = (HttpWebResponse)ex.Response;
            using (WebResponse response = ex.Response)
            using (Stream data = response.GetResponseStream())
            using (StreamReader reader = new StreamReader(data))
            {
                string errorMessage = reader.ReadToEnd();
            }
 }