【问题标题】:Showing custom error message on web browser在 Web 浏览器上显示自定义错误消息
【发布时间】:2018-05-22 06:49:00
【问题描述】:

我创建了一个 ASP.NET Web API,它调用 Java Web 服务器来检索数据。当 java web 服务器关闭时,我希望 Web API 显示错误消息:{"ErrorMessage:" Server is down} 我应该添加哪些代码来实现在浏览器上显示的自定义错误消息?

这是我的代码:

RestfulClient.cs

public class RestfulClient
{
    private static HttpClient client;
    private static string BASE_URL = "http://localhost:8080/";

    static RestfulClient()
    {
        client = new HttpClient();
        client.BaseAddress = new Uri(BASE_URL);
        client.DefaultRequestHeaders.Accept.Add(
            new MediaTypeWithQualityHeaderValue("application/json"));
    }

    public async Task<string> addition(int firstNumber, int secondNumber)
    {

        try
        {
            var endpoint = string.Format("addition/{0}/{1}", firstNumber, secondNumber);
            var response = await client.GetAsync(endpoint);
            return await response.Content.ReadAsStringAsync();
        }
        catch (Exception e)
        {
            //What do i have to code here?
        }
        return null;
    }

}

AdditionController.cs

public class Temp
{
    public string firstNumber { get; set; }
    public string secondNumber { get; set; }
    public string sum { get; set; }
}

public class AdditionController : ApiController
{
    private RestfulClient restfulClient = new RestfulClient();
    public async Task<IHttpActionResult> Get(int firstNumber, int secondNumber)
    {
        var result = await restfulClient.addition(firstNumber, secondNumber);
        var resultDTO = JsonConvert.DeserializeObject<Temp>(result);
        return Json(resultDTO);
    }
}

有人请帮帮我,非常感谢。

【问题讨论】:

  • 一个try/catch...

标签: c# asp.net error-handling


【解决方案1】:

如果您捕捉到Exception 类型的异常,然后确定您调用的服务器已关闭,那将是不正确的。在您调用其他服务之前或其他服务成功返回之后,您自己的代码中可能会出现问题。因此,您需要谨慎做出决定。

话虽如此,仍然很难说您何时可以自信地做出该决定:调用服务是否返回了正确的消息等。

无论如何,你可以做类似这样的事情:

try
{
    // ...
}
catch (System.Net.WebException ex)
{
    if (ex.Status == System.Net.WebExceptionStatus.ConnectFailure)
    {
        // To use these 2 commented out returns, you need to change 
        // your method's return type to Task<IHttpActionResult>
        // return Content(System.Net.HttpStatusCode.ServiceUnavailable, "Unavilable.");
        // return StatusCode(System.Net.HttpStatusCode.ServiceUnavailable);
        return "Unavailable"
    }
}
catch(Exception ex)
{
    // You could be here because something went wrong in your server,
    // or the server you called which was not caught by the catch above
    // because it was not WebException. Make sure to give it some 
    // thought.
    // You need to change 
    // your method's return type to Task<IHttpActionResult> or 
    // just return a string.
    return StatusCode(System.Net.HttpStatusCode.InternalServerError);
}

【讨论】:

  • 如果我将方法更改为 Task 我可以返回 Ok(response) 对吗?我应该将var endpoint 部分更改为什么?
  • 我想我需要它是 Task as var endpoint = string.Format("addition/{0}/{1}", firstNumber, secondNumber); 当我从 java web 服务检索数据时,这行代码很重要
  • 为什么会有这么多“退货”对不起,请指导我,我对此很陌生
  • @SushaNaidu 您不需要将var endpoint 更改为任何内容。有很多回报,因为我想向您展示您有这些选择。只需使用其中之一。你做了正确的事,把它改成Task&lt;IHttpActionResult&gt;。如果您需要更多帮助,请告诉我。
  • 当我将其更改为 Task&lt;IHttpActionResult&gt; 时,我得到 2 个错误。我在await response.Content.ReadAsStringAsync() 下得到一条红线,错误状态为Cannot implicitly convert type string to System.Web.Http.IHttpActionResult
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 2016-09-19
相关资源
最近更新 更多