Dim*_*Dim 0 c# asp.net asp.net-web-api
我是ASP.NET新手,我想问一下哪种方法更适合在SQL Server中插入新行.
我想避免的最大问题是将数据双重插入SQL Server.也许对于某些网络延迟,我会在客户端的应用程序中出现服务器错误,但服务器已收到我的数据并将其插入SQL Server.当我重试时,它将重新插入它们.
post或put方法可以避免这种情况吗?或者我需要创建自己的机制?
public void Post([FromBody]string value)
{
}
// PUT api/values/5
public void Put(int id, [FromBody]string value)
{
}
Run Code Online (Sandbox Code Playgroud)
还有最后一个问题,我可以在同一个控制器中创建两个post方法,还是我必须创建一个新方法?
对不起,如果问题看起来很容易,但正如我所说,我是asp.net的新手.谢谢
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);
}
Run Code Online (Sandbox Code Playgroud)
然后在数据层上你可以做这样的事情:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
这不是最佳方法,但我在此尝试显示的是,您可以在POST或PUT上插入资源.问题是RESTful API是按照RESTful标准设计的.如果您使用PUT方法插入数据,那么您可能会遇到架构问题,并且您的API根本不是RESTful.即使它使用HTTP方法进行通信等等.
RESTful API遵循该标准非常重要.对于您和使用API的人.
这里有一本RESTful入门圣经.我通常会将此发送给那些希望展现RESTful世界的人:https://blog.octo.com/en/design-a-rest-api/
| 归档时间: |
|
| 查看次数: |
1373 次 |
| 最近记录: |