2017-05-30 30 views
2

我有这样的API方法:如何在Web API控制器中处理“Not Found”错误 - Get Method,MVC 4?

[HttpGet] 
    public MyTable GetMyTable(byte id, string langid) 
    { 
     MyTable mytable = db.MyTables.Find(id, langid); 

     if (mytable == null) 
     { 
      throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound)); 
     } 

     return mytable; 
    } 

目前,它抛出NOTFOUND例外,但我不希望它抛出异常,而不是我要在规定的入学它没有发现JSON格式的消息来获得。

我可以使用HttpResponseException添加try/catch块,但此方法返回模型的实例,而不是HttpResponseMessage。

注:我使用MVC 4,Visual Studio 2010中,4.3的EntityFramework

我应该在上面的方法改变?

P.S.它会更好,如果我只是返回创建的空实例与

myTable = db.MyTableDbSet.Create(); 

回答

0

我使用.NET 4.0,并加入Task.FromResult()在.NET 4.5中,所以我不认为我将能够使用IHttpActionResult接口。

这里是我做过什么:

public HttpResponseMessage GetMyTable(string id, string langid) 
    { 
     MyTable myTable = db.MyTableDbSet.Find(id, langid); 

     if (myTable == null) 
     { 
      return Request.CreateResponse(HttpStatusCode.NotFound); 
     } 
     else 
     { 
      return Request.CreateResponse(HttpStatusCode.OK, myTable); 
     } 
    } 
4

我发现自己舒适与这种做法:

[HttpGet] 
public IHttpActionResult GetMyTable(byte id, string langid) 
{ 
    var mytable = db.MyTables.Find(id, langid); 

    if (mytable != null) 
    { 
     return Ok(mytable); 
    } 

    return NotFound(); 
} 
+0

做什么包,我需要包括使用IHttpActionResult和NOTFOUND。它似乎无法解决这些问题。当我右键单击它们时,我没有得到“解析”选项? – Vlad

+2

using System.Web.Http; –

+0

是的,我有System.Web.Http。我正在使用MVC 4,Visual Studio 2010,EntityFramework 4.3它不认识它。看来我使用的是旧版的Web API? – Vlad

相关问题