ASP.NET: 不使用 HttpPut 和 HttpDelete 进行更新和删除
ASP.NET: Update and delete without using HttpPut and HttpDelete
我发现很多开源项目不使用HttpPut
和HttpDelete
进行更新和删除。相反,他们在他们的方法之前添加了 HttpPost
端点,并且功能也成功实现了。
我了解到的是,我们使用HttpPut
和HttpDelete
进行更新和删除。我很困惑。
我在下面添加了更新方法和删除方法的示例。
更新:
[HttpPost]
public async Task<IActionResult> Edit(int id, NewInvoiceVM invoice)
{
var allInvoices = await _service.GetAllAsync();
var invoicesValidate = allInvoices.ToList().FirstOrDefault(n => n.SupplierName == invoice.SupplierName && n.InvoiceNumber == invoice.InvoiceNumber);
await _service.UpdateInvoiceAsync(invoice);
return RedirectToAction(nameof(Index));
}
删除:
[HttpPost, ActionName("Delete")]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var invoiceDetails = await _service.GetInvoiceByIdAsync(id);
if (invoiceDetails == null) return View("NotFound");
await _service.DeleteAsync(id);
return RedirectToAction(nameof(Index));
}
问题:更新和删除方法是否需要HttpPut
和HttpDelete
?如果没有,我们应该什么时候使用它们?
已经有微软如何做到这一点的例子。在大多数情况下,您应该这样做(似乎您使用的是 .Net?)。
也许您看到的存储库中的人只是犯了错误。
如果您要实施 API,您有很多方法可以实现。使用 PUT、DELETE、UPDATE 等都是推荐的最佳实践,但没有必要使用它们。
您可以编写一个 API 来侦听删除某些内容的 DELETE 请求,或者您可以编写一个 API 来侦听 POST 请求,并使用另一个参数告诉它是否这是一个删除,或其他东西。两者都工作得很好。
您以某种方式进行操作的原因是,如果您使用了最佳实践推荐,那么当其他人开始使用您的东西时,他们会很直观。这适用于 PUT/POST,因为它适用于所有编码最佳实践。
从历史上看,Web 浏览器没有对 PUT
、PATCH
、DELETE
和其他动词的原生支持。他们只支持 GET
和 POST
。 API 实现 PUT
等必须通过发送带有隐藏字段(通常命名为 _method
)的 POST
来假装他们发送的不是其他东西POST
.
出于这个原因,许多项目认为不值得实施。
我发现很多开源项目不使用HttpPut
和HttpDelete
进行更新和删除。相反,他们在他们的方法之前添加了 HttpPost
端点,并且功能也成功实现了。
我了解到的是,我们使用HttpPut
和HttpDelete
进行更新和删除。我很困惑。
我在下面添加了更新方法和删除方法的示例。
更新:
[HttpPost]
public async Task<IActionResult> Edit(int id, NewInvoiceVM invoice)
{
var allInvoices = await _service.GetAllAsync();
var invoicesValidate = allInvoices.ToList().FirstOrDefault(n => n.SupplierName == invoice.SupplierName && n.InvoiceNumber == invoice.InvoiceNumber);
await _service.UpdateInvoiceAsync(invoice);
return RedirectToAction(nameof(Index));
}
删除:
[HttpPost, ActionName("Delete")]
public async Task<IActionResult> DeleteConfirmed(int id)
{
var invoiceDetails = await _service.GetInvoiceByIdAsync(id);
if (invoiceDetails == null) return View("NotFound");
await _service.DeleteAsync(id);
return RedirectToAction(nameof(Index));
}
问题:更新和删除方法是否需要HttpPut
和HttpDelete
?如果没有,我们应该什么时候使用它们?
已经有微软如何做到这一点的例子。在大多数情况下,您应该这样做(似乎您使用的是 .Net?)。
也许您看到的存储库中的人只是犯了错误。
如果您要实施 API,您有很多方法可以实现。使用 PUT、DELETE、UPDATE 等都是推荐的最佳实践,但没有必要使用它们。
您可以编写一个 API 来侦听删除某些内容的 DELETE 请求,或者您可以编写一个 API 来侦听 POST 请求,并使用另一个参数告诉它是否这是一个删除,或其他东西。两者都工作得很好。
您以某种方式进行操作的原因是,如果您使用了最佳实践推荐,那么当其他人开始使用您的东西时,他们会很直观。这适用于 PUT/POST,因为它适用于所有编码最佳实践。
从历史上看,Web 浏览器没有对 PUT
、PATCH
、DELETE
和其他动词的原生支持。他们只支持 GET
和 POST
。 API 实现 PUT
等必须通过发送带有隐藏字段(通常命名为 _method
)的 POST
来假装他们发送的不是其他东西POST
.
出于这个原因,许多项目认为不值得实施。