Возвращение сообщения об ошибке JSON, IActionResult - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть конечная точка контроллера API, например:

public IHttpActionResult AddItem([FromUri] string name)
{
    try
    {
        // call method
        return this.Ok();
    }
    catch (MyException1 e)
    {
        return this.NotFound();
    }
    catch (MyException2 e)
    {
        return this.Content(HttpStatusCode.Conflict, e.Message);
    }
}

Это вернет строку в теле, например "here is your error msg", есть ли способ вернуть JSON с 'Content'?

Например,

{
  "message": "here is your error msg"
}

Ответы [ 4 ]

0 голосов
/ 05 декабря 2018

Просто создайте желаемую объектную модель как анонимный объект и верните его.

В настоящее время вы возвращаете только необработанное сообщение об исключении.

public IHttpActionResult AddItem([FromUri] string name) {
    try {
        // call service method
        return this.Ok();
    } catch (MyException1) {
        return this.NotFound();
    } catch (MyException2 e) {
        var error = new { message = e.Message }; //<-- anonymous object
        return this.Content(HttpStatusCode.Conflict, error);
    }
}
0 голосов
/ 05 декабря 2018

1) Самый простой способ: вы можете возвращать напрямую любой объект, который вам нужен, и он будет сериализован как JSON.Это может быть даже анонимный объект класса, созданный с помощью нового {}

2)

return new HttpResponseMessage(HttpStatusCode.BadRequest)
    {
        Content = new ObjectContent(typeof(ErrorClass), errors, new JsonMediaTypeFormatter())
    };
0 голосов
/ 05 декабря 2018
return Json(new {message = e.Message});
0 голосов
/ 05 декабря 2018

В вашем случае вам нужно вернуть объект, где он должен быть, как показано ниже, я не выполнил, но, пожалуйста, попробуйте

public class TestingMessage
{
    [JsonProperty("message")]
    public string message{ get; set; }
}

public IHttpActionResult AddItem([FromUri] string name)
{
    TestingMessage errormsg=new TestingMessage();
    try
    {
        // call service method
        return this.Ok();
    }
    catch (MyException1)
    {
        return this.NotFound();
    }
    catch (MyException2 e)
    {
        string error=this.Content(HttpStatusCode.Conflict, e.Message);
        errormsg.message=error;
        return errormsg;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...