C# Web API2,如何返回错误

C# Web API2,如何返回错误,c#,asp.net-web-api2,C#,Asp.net Web Api2,如果没有异常,我可以返回Ok 但如果有例外,我该怎么办 请注意,我让javascript客户端创建了一个模型来保存您想要返回并传递的错误信息 public IHttpActionResult保存(项目){ 试一试{ 结果=MyRepository.Save(项目); 返回Ok(结果); }抓住{ //我应该在这里做什么?创建一个模型来保存您想要返回的数据 var myErrorModel=new{ code=“我的自定义错误代码或500服务器错误代码”, message=“一些友好的错误消息”

如果没有异常,我可以返回Ok

但如果有例外,我该怎么办


请注意,我让javascript客户端创建了一个模型来保存您想要返回并传递的错误信息

public IHttpActionResult保存(项目){
试一试{
结果=MyRepository.Save(项目);
返回Ok(结果);
}抓住{
//我应该在这里做什么?创建一个模型来保存您想要返回的数据
var myErrorModel=new{
code=“我的自定义错误代码或500服务器错误代码”,
message=“一些友好的错误消息”
};
//我希望返回一个错误响应,我如何才能这样做?
var response=Request.CreateResponse(HttpStatusCode.InternalServerError,myErrorModel);
返回响应消息(response);
}
}
在错误处理程序中的javascript客户端中,您可以访问模型属性,并根据需要处理错误

var handleResponse=函数(数据){
var代码=data.code;
var message=data.message
};
更新:


同意@Win,我个人不喜欢在控制器操作中这样做,因为这是一个交叉关注点,基本上已经将catch块中的所有内容都移动到了全局错误处理程序中。

在Web API 2中,您可以使用BadRequest返回错误消息

public IHttpActionResult Save(item)
{
    try
    {
        result = MyRepository.Save(item);
        return Ok(result);
    }
    catch
    {
        // What should I do here?
        // I wish to return an error response how can i do that? 
    }
}

仅供参考:不要使用try catch block来吞咽异常。我个人不喜欢使用try-catchblock-inside-Action方法。相反,我让WebAPI2全局异常处理程序处理异常。这超出了你原来问题的范围

您可以使用HttpResponseException发送错误消息

public IHttpActionResult Save(item)
{
    try
    {
        result = MyRepository.Save(item);
        return Ok(result);
    }
    catch
    {
        return BadRequest("Error message");
    }
}

如下所示使用
HttpResponseException

public IHttpActionResult Save(item)
{
    try
    {
        result = MyRepository.Save(item);
        return Ok(result);
    }
    catch
    {
       var resp = new HttpResponseMessage(HttpStatusCode.NotFound)
        {
            Content = new StringContent(string.Format("Error Message!!"),
            ReasonPhrase = "Error Reason phrase"
        };
        throw new HttpResponseException(resp);
 
    }
}
或者另一种方式是:

throw new HttpResponseException(HttpStatusCode.InternalServerError)
可能的副本或请参阅。您希望向调用者返回非200状态代码,这是返回错误的公认方式。
var response = new HttpResponseMessage(HttpStatusCode.NotFound)  
    {  
        Content = new StringContent("some error"),  
            ReasonPhrase = "Not Found"  
    };  

    throw new HttpResponseException(response);