【发布时间】:2014-12-09 12:20:52
【问题描述】:
全部!
我正在使用 OData v4、Web API 2.2 和 ODataController 类。我已经实现了简单的 Get 方法来返回单行和一组行。当有行可以找到时,一切都很好。但如果我更改 $filter 或指定一个不存在的密钥 ID,我的应用程序会收到状态代码 500。
问题:
我的 REST 服务应该返回 204 还是 404?好像500是假的。
我见过使用 EntitySetController 的示例。但似乎最新的 OData 正在使用 System.Web.OData.*,而 EntitySetController 示例正在使用 System.Web.Http.OData.* - 后者不再使用了吗?我不应该使用 EntitySetController 吗?
修改我的 OData 服务以返回适当的状态代码的最佳方法是什么?
这是我的控制器。
using ERSHubRest.Models;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using System.Web.Http;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Web.OData;
using System.Web.OData.Routing;
using System.Web.OData.Query;
using System.Runtime.Serialization;
using System.Collections.Generic;
using System.Security.Claims;
using System.Web.Http;
namespace ERSHubRest.Controllers
{
public class AppVersionsController : ODataController
{
HubModel db = new HubModel();
private bool AppVersionsExists(System.Guid key)
{
return db.AppVersions.Any( p => p.BusinessId == key );
}
[EnableQuery]
public IQueryable<AppVersions> Get()
{
if (db.AppVersions.Count() <= 0)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return db.AppVersions;
}
[EnableQuery]
public SingleResult<AppVersions> Get([FromODataUri] System.Guid key)
{
IQueryable<AppVersions> result = db.AppVersions.Where( p => p.BusinessId == key );
if (result == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
return SingleResult.Create(result);
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
谢谢!
皮特
【问题讨论】: