为了账号安全,请及时绑定邮箱和手机立即绑定

在 SQL Server 中插入新数据的 Post 或 Put 方法?

在 SQL Server 中插入新数据的 Post 或 Put 方法?

C#
泛舟湖上清波郎朗 2022-06-19 16:38:12
我是 ASP.NET 的新手,我想问一下哪种方法更适合在 SQL Server 中插入新行。我要避免的最大问题是将数据重复插入 SQL Server。也许由于一些网络延迟,我会在我的客户端应用程序中出现服务器错误,但服务器已经收到我的数据并将它们插入 SQL Server。当我重试时,它会重新插入它们。post 或 put 方法可以避免这种情况吗?或者我需要创建自己的机制?public void Post([FromBody]string value){}// PUT api/values/5public void Put(int id, [FromBody]string value){}还有最后一个问题,我可以在同一个控制器中创建两个 post 方法还是必须创建一个新方法?抱歉,如果问题看起来很简单,但正如我所说,我是 asp.net 的新手。谢谢
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

POST 或 PUT 方法本身并不能解决任何问题。如果您想避免您描述的行为,您应该通过向该方法添加您自己的逻辑来解决该问题。您的实现必须控制数据是否存在。


理想情况下,在 REST API 上,POST 用于创建资源,PUT 用于更新现有资源。


话虽如此,您可以根据谁在调用该端点以及在应用程序的哪个实例中来实现您的逻辑。例如,如果有人两次使用同一资源发送 POST,您可以检查该资源是否存在并发送描述该情况的 HTTP 状态。


编辑:


我将添加一些代码向您展示。它是如何工作的:


假设您想在应用程序中创建和更新用户。其端点可能类似于:http://localhost:8080/api/users/使用 POST 方法并将用户作为 JSON 发送到请求正文中。


您将拥有一个像这样的 UsersController:


    public HttpResponseMessage Post([FromBody]UserModel user)

    {

        SQL.InsertUser(user);


        return Request.CreateResponse(HttpStatusCode.OK);

    }

然后在数据层你可以做这样的事情:


    public static void InsertUser(UserModel user)

    {

        try

        {

            using (_conn = new SqlConnection(_connectionString))

            {

                _conn.Execute(@"IF EXISTS(SELECT * FROM USER WHERE ID = @ID)

                                BEGIN

                                    /*DO THE UPDATE*/

                                END

                            ELSE

                                BEGIN

                                    /*DO THE INSERT*/

                                END", user);

            }

        }

        catch (Exception ex)

        {

            throw ex;

        }

    }

这不是最佳方法,但我想在这里展示的是您可以在 POST 或 PUT 上插入资源。问题是 RESTful API 的设计目的是遵循 RESTful 标准。如果您使用 PUT 方法插入数据,那么您可能会遇到架构问题,并且您的 API 根本不是 RESTful。即使它使用 HTTP 方法形成通信等等。


在 RESTful API 上遵循标准非常重要。对于您和使用 API 的人。


在这里,您获得了 RESTful 入门圣经。我通常将此发送给所有希望了解 RESTful 世界的人:https ://blog.octo.com/en/design-a-rest-api/


查看完整回答
反对 回复 2022-06-19
?
潇湘沐

TA贡献1816条经验 获得超6个赞

我们用 [HttpPost] 属性修饰的 Post() 方法。

Put() 能够更新 RESTful 服务中的某些内容


查看完整回答
反对 回复 2022-06-19
  • 2 回答
  • 0 关注
  • 302 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信