首页 > 解决方案 > 如何在 Web API 中限制 POST

问题描述

我的 SiteController.cs 文件中有以下POST代码。

// POST: api/site
[ResponseType(typeof(site))]
public IHttpActionResult Postsite(site site)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    db.site.Add(site);
    db.SaveChanges();

    return CreatedAtRoute("DefaultApi", new { id = site.id }, site);
}

我有一个 Web 表单,我在其中使用代码到POST我的数据库中 Site 表的字段。

在数据库(以及我的 site.cs 类)中,Site 有 5 个属性:ID、Name、City、State 和 Country。当我使用POST它添加到此表中的表单时。

我想要做的是检查POST上面的代码,如果Name该类的属性在表/API 结果中已经存在该名称。我将如何使这种POST方法能够进行此检查?

我试过做类似的事情if site.name == (???)然后抛出一个错误,但我不确定 (???) 中会发生什么来检查 API 的其余结果。

标签: c#asp.netasp.net-web-apiwebforms

解决方案


先检查记录是否存在

if(!db.site.Any(s => s.Name == site.name))
{
    db.site.Add(site);
    db.SaveChanges();
}

如果您想获取状态,这里有一些示例代码:

// POST: api/site
public HttpResponseMessage Postsite(site site)
{
       if(!db.site.Any(s => s.Name == site.name))
       {
           db.site.Add(site);
           db.SaveChanges();
           var message = Request.CreateResponse(HttpStatusCode.Created, site);
           message.Headers.Location = new Uri(Request.RequestUri + site.Id.ToString());
           return message;
       }
       else
       {
          return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ex);
       }

}

推荐阅读