【问题标题】:WebAPI Odata Delete ActionWebAPI Odata 删除操作
【发布时间】:2015-04-10 21:15:44
【问题描述】:

我正在尝试使用 WebApi 2.2 和 EF 6.1.2 和 Code First 模型来实现 Odata 端点。我按照这里找到的教程进行操作:

http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/odata-v3/creating-an-odata-endpoint

GET 动词和 PUT 一样好用。但是,DELETE 请求会返回 404 错误。有关如何调试此问题的任何建议?

这里是实体、WebApiConfig 和控制器的示例。

public partial class BoltLoad
{
    public int Id { get; set; }

    [StringLength(25)]
    public string LoadNumber { get; set; }

    public string BoltUserId { get; set; }

    [Column(TypeName = "datetime2")]
    public DateTime CompletedDate { get; set; }

    [StringLength(50)]
    public string PickupAttention { get; set; }

    [StringLength(50)]
    public string PickupLine1 { get; set; }

    [StringLength(50)]
    public string PickupCity { get; set; }

    [StringLength(50)]
    public string PickupStateProvince { get; set; }

    [StringLength(50)]
    public string DropAttention { get; set; }

    [StringLength(50)]
    public string DropLine1 { get; set; }

    [StringLength(50)]
    public string DropCity { get; set; }

    [StringLength(50)]
    public string DropStateProvince { get; set; }

    public Guid GlobalId { get; set; }

    [Column(TypeName = "timestamp")]
    [MaxLength(8)]
    [Timestamp]
    public byte[] Version { get; set; }

    [Column(TypeName = "datetime2")]
    public DateTime CreatedOn { get; set; }

    [StringLength(256)]
    public string CreatedBy { get; set; }

    [Column(TypeName = "datetime2")]
    public DateTime ModifiedOn { get; set; }

    [StringLength(256)]
    public string ModifiedBy { get; set; }
}

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
        builder.EntitySet<BoltLoad>("BoltLoads");
        var t = config.Routes.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());


    }
}


public class BoltLoadsController : ODataController
{
    private AnyWare db = new AnyWare();

    // GET: odata/BoltLoads
    [EnableQuery]
    public IQueryable<BoltLoad> GetBoltLoads()
    {
        return db.BoltLoads;
    }

    // GET: odata/BoltLoads(5)
    [EnableQuery]
    public SingleResult<BoltLoad> GetBoltLoad([FromODataUri] int key)
    {
        return SingleResult.Create(db.BoltLoads.Where(boltLoad => boltLoad.Id == key));
    }

    // PUT: odata/BoltLoads(5)
    public IHttpActionResult Put([FromODataUri] int key, Delta<BoltLoad> patch)
    {
        Validate(patch.GetEntity());

        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        BoltLoad boltLoad = db.BoltLoads.Find(key);
        if (boltLoad == null)
        {
            return NotFound();
        }

        patch.Put(boltLoad);

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!BoltLoadExists(key))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return Updated(boltLoad);
    }

    // POST: odata/BoltLoads
    public IHttpActionResult Post(BoltLoad boltLoad)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        db.BoltLoads.Add(boltLoad);
        db.SaveChanges();

        return Created(boltLoad);
    }

    // PATCH: odata/BoltLoads(5)
    [AcceptVerbs("PATCH", "MERGE")]
    public IHttpActionResult Patch([FromODataUri] int key, Delta<BoltLoad> patch)
    {
        Validate(patch.GetEntity());

        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        BoltLoad boltLoad = db.BoltLoads.Find(key);
        if (boltLoad == null)
        {
            return NotFound();
        }

        patch.Patch(boltLoad);

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!BoltLoadExists(key))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return Updated(boltLoad);
    }

    // DELETE: odata/BoltLoads(5)

    public IHttpActionResult Delete([FromODataUri] int key)
    {
        BoltLoad boltLoad = db.BoltLoads.Find(key);
        if (boltLoad == null)
        {
            return NotFound();
        }

        db.BoltLoads.Remove(boltLoad);
        db.SaveChanges();

        return StatusCode(HttpStatusCode.NoContent);
    }

    protected override void Dispose(bool disposing)
    {
        if (disposing)
        {
            db.Dispose();
        }
        base.Dispose(disposing);
    }

    private bool BoltLoadExists(int key)
    {
        return db.BoltLoads.Count(e => e.Id == key) > 0;
    }
}

【问题讨论】:

标签: c# asp.net-web-api odata


【解决方案1】:

我发现了问题所在。网站设置为以经典模式运行。一旦我将其更改为集成删除功能正确执行。

【讨论】:

  • 你是怎么做到的?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2013-06-13
  • 1970-01-01
  • 2016-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多