2

下面是我的 MVC Web Api RC 的 Get 方法。

public Employee Get(int id)
{
     Employee emp= null;

     //try getting the Employee with given id, if not found, gracefully return error message with notfound status
     if (!_repository.TryGet(id, out emp))
         throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.NotFound)
         {
             Content = new StringContent("Sorry! no Employee found with id " + id),
             ReasonPhrase = "Error"
         });

      return emp;
}

这里的问题是,每当抛出错误“对不起!没有找到带有 id 的员工”时,它只是平面文本格式。但是我想根据我当前的格式化程序设置格式。默认情况下,我在 global.asax 中设置了 XML 格式化程序。所以错误应该以 XML 格式显示。就像是 :

<error>
  <error>Sorry! no Employee found with id </error>
</error>

对于 Json 格式化程序也是如此。它应该是 :

[{"errror","Sorry! no Employee found with id"}]

提前致谢

4

1 回答 1

7

您正在返回一个StringContent. 这意味着内容将按原样返回,并由您自行格式化。

我个人会定义一个模型:

public class Error
{
    public string Message { get; set; }
}

进而:

if (!_repository.TryGet(id, out emp))
{
    var response = Request.CreateResponse(
        HttpStatusCode.NotFound,
        new Error { Message = "Sorry! no Employee found with id " + id }
    );
    throw new HttpResponseException(response);
}

启用 XML Accept 的客户端会看到:

<Error xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/AppName.Models">
    <Message>Sorry! no Employee found with id 78</Message>
</Error>

启用 JSON Accept 的客户端会看到:

{"Message":"Sorry! no Employee found with id 78"}
于 2012-06-20T11:42:58.353 回答