繁体   English   中英

返回Task的JSON错误消息 <IHttpActionResult> 方法

[英]Returning JSON error message for Task<IHttpActionResult> method

我创建了一个ASP.NET Web API,它将调用Java Web服务并以JSON显示一些结果。 当Java Web服务未运行时,我收到以下错误消息:

{,“ Message”:“发生错误。”,“ ExceptionMessage”:“未实现该方法或操作。”,“ ExceptionType”:“ System.NotImplementedException”,“ StackTrace”:“位于ApiClientJavaWebService.Models.RestfulClient。 C:\\ Users \\ attsuap1 \\ Desktop \\ Server Project \\ ApiClientJavaWebService \\ ApiClientJavaWebService \\ Models \\ RestfulClient.cs:line 43 \\ r \\ n在C:\\ Users \\ attsuap1 \\ Desktop \\ ServerProject \\ ApiClientJavaWebService.Models.RestfulClient.d__3.MoveNext() Users \\ attsuap1 \\ Desktop \\ Server Project \\ ApiClientJavaWebService \\ ApiClientJavaWebService \\ Models \\ RestfulClient.cs:line 36 \\ r \\ n ---从上一个引发异常的位置开始的堆栈结束跟踪--- \\ r \\ n在System.Runtime .CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\\ r \\ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\\ r \\ n在System.Runtime.CompilerServices.TaskAwaiter 1.GetResult()\\ r \\ n在C:\\ Users \\ attsuap1 \\ Des中的ApiClientJavaWebService.Controllers.AdditionController.d__1.MoveNext() ktop \\ Server Project \\ ApiClientJavaWebService \\ ApiClientJavaWebService \\ Controllers \\ AdditionController.cs:line 20 \\ r \\ n ---从上一个引发异常的位置开始的堆栈结束跟踪--- \\ r \\ n位于System.Runtime.CompilerServices.TaskAwaiter .ThrowForNonSuccess(任务任务)\\ r \\ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\\ r \\ n在System.Threading.Tasks.TaskHelpersExtensions.d__3`1.MoveNext()\\ r \\ n-- -从上一个引发异常的位置开始的堆栈结束跟踪--- \\ r \\ n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\\ r \\ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务) )\\ r \\ n在System.Web.Http.Controllers.ApiControllerActionInvoker.d__0.MoveNext()\\ r \\ n ---从上一个引发异常的位置开始的堆栈跟踪--- \\ r \\ n在System.Runtime .CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\\ r \\ n位于System.Runtime.CompilerServices.TaskAwaiter.Hand leNonSuccessAndDebuggerNotification(任务任务)\\ r \\ n位于System.Web.Http.Controllers.ActionFilterResult.d__2.MoveNext()\\ r \\ n ---从上一个引发异常的位置开始的堆栈跟踪--- \\ r \\ n在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\\ r \\ n在System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\\ r \\ n在System.Web.Http.Dispatcher.HttpControllerDispatcher.d__1.MoveNext ()“}

我如何更改此设置以使错误消息显示为{"The server is not running."}

这是我的代码:

AdditionClient.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)
        {

        }

        return null;
    }
}

AdditionController.cs

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
        {
            var endpoint = string.Format("addition/{0}/{1}", firstNumber, secondNumber);
            var response = await client.GetAsync(endpoint);
            return await response.Content.ReadAsStringAsync();
        }

        catch (Exception e)
        {
            if (e.InnerException.Message == "The method or operation is not implemented")
            {
                //Do something
            }
        }

我已经实现了我想要的。 我意识到try catch方法应该在控制器类而不是AdditionClient.cs类中。

这是我编辑的课程:

AdditionClient.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)
    {
            var endpoint = string.Format("addition/{0}/{1}", firstNumber, secondNumber);
            var response = await client.GetAsync(endpoint);
            return await response.Content.ReadAsStringAsync();
     } 
}

AdditionController.cs(关注try catch部分)

        try
        {
            var result = await restfulClient.addition(firstNumber, secondNumber);
            var resultDTO = JsonConvert.DeserializeObject<Temp>(result);
            return Json(resultDTO);
        }

        catch (Exception e)
        {
            var result = @"Server is down";
            return Ok(new { ErrorMessage = result });
        }

当服务器未运行时,将在浏览器上显示的结果为{"ErrorMessage":"Server is down"}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM