如何返回正确的Http Response而不是JSON对象

时间:2018-10-08 14:01:16

标签: c# asp.net rest

我有一个非常简单的Web API,只有GET控制器。在get控制器内部,我正在读取一个XML文件,将该XML文件转换为JSON对象并返回它。

public JObject Get()
{
    //Read XML
    XDocument xDoc = XDocument.Load(@"D:\myfile.xml");
    string jsonStr = JsonConvert.SerializeXNode(xDoc);
    JObject json = JObject.Parse(jsonStr);

    return json;              
}

我想将XML阅读和JSON转换行放入异常处理程序中,如果无法打开XML文件(或任何其他文件),则返回 404错误代码(或这种情况下的任何适当代码)发生异常)。但是由于我的返回类型ID为JObject,因此我无法返回正确的http respose,那么我该怎么做?

1 个答案:

答案 0 :(得分:3)

您应将操作方法​​的返回类型更改为IHttpActionResult,然后可以执行类似的操作

public IHttpActionResult Get()
{
    if (!File.Exists(@"D:\myfile.xml"))
        return NotFound();

    //Read XML
    XDocument xDoc = XDocument.Load(@"D:\myfile.xml");
    string jsonStr = JsonConvert.SerializeXNode(xDoc);
    JObject json = JObject.Parse(jsonStr);
    return Ok(json);
}

这应该给您带来灵活性。

使用方法的快速说明

return OK(json)将返回成功的(HTTP 200)响应,并在正文中带有序列化的json

return NotFound()将导致请求失败和HTTP 404结果。

对于错误,理想情况下,您应该返回5xx代码,可以使用return InternalServerError();

来实现。

有关ApiController基类中这些助手和其他助手的更多信息,请查看page on microsoft docs