C#.net Web请求在调用Web API时无法获得404自定义错误消息,但邮递员可以

时间:2019-12-13 09:04:04

标签: c# asp.net-web-api servicestack webrequest

我正在使用ServiceStack在自己的Web API中调用外部Web API。 对于取消订阅的用户,外部Web API会引发预期的“ 404 Not found”(404未找到)异常,并且自定义消息为“没有使用uuid的订阅者:{... uuid已发送}” 。我可以在邮递员那里看到它 enter image description here

但是当我在ServiceStack处理程序中调用它时,在catch语句的异常详细信息中没有得到自定义异常。 以下是我的代码的一部分

public class MyString {

    private char[] arr;

    public MyString(int length) {


        arr = new char[length]; 

    }

异常详细信息:

    try{

           //Create Request
            var statusUri =new Uri(urlOfExternalWebAPI, UriKind.Absolute);
            var serviceRequest = (HttpWebRequest) WebRequest.Create(statusUri);
            serviceRequest.Method = "GET";
            serviceRequest.Headers.Add("Authorization",OauthToken.TokenType + " " + OauthToken.AccessToken);
            serviceRequest.Accept = "application/json";

            //Get the response.
            using (var response = serviceRequest.GetResponse())
            {                    
                using (var responseStream = response.GetResponseStream())
                {
                    if (responseStream != null)
                    {
                        using (var reader = new StreamReader(responseStream))
                        {
                            var responseFromServer = reader.ReadToEnd();
                        }                                
                    }
                }
            }
        }
        catch (WebServiceException e) // 
        {
            //Exception is not getting caught here 
            throw;
        }
        catch (Exception ex)
        {
            // exception is caught here but could not get the custom error message
            throw;
        }

但是在例外的任何字段中,我都没有收到我在邮递员中收到的自定义消息。

我需要确切的自定义消息来区分404(由于无效的URL)和404(由于无效的订户)。请帮忙。

谢谢。

2 个答案:

答案 0 :(得分:1)

看起来您需要抓住 WebException 相对于 WebServiceException

除非有明确的要求,否则我也不认为您应该为无效的订户返回404!

答案 1 :(得分:1)

由于您没有使用ServiceStack's Generic C# Clients,因此HTTP请求不会抛出WebServiceException

您而是直接使用.NET的HttpWebRequest,因此只抛出WebException,但是ServiceStack确实包含HTTP Utils,它提供了用于访问.NET的{ {1}},例如:

HttpWebRequest