簡體   English   中英

WebAPI Odata刪除操作

[英]WebAPI Odata Delete Action

我正在嘗試使用帶有代碼優先模型的WebApi 2.2和EF 6.1.2來實現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和Controller的示例。

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;
    }
}

我解決了這個問題。 該網站設置為在經典模式下運行。 一旦將其更改為集成,則可以正確執行DELETE函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM