最近,我在asp.net核心剃须刀页面上了解到有关请求处理的信息,并说它支持使用约定的head
请求:
public void OnHead()
{
}
效果很好。然后我也尝试使用相同的约定进行删除。
public void OnDelete()
{
}
但是,当我使用邮递员发送删除请求时,它返回了错误的请求(500)。我不确定是否需要提供其他配置才能使用删除请求。任何人都可以帮助我。
答案 0 :(得分:1)
假设您有这样的标记:
<button type="submit" asp-page-handler="delete"
asp-route-id="@contact.Id">delete</button>
正确的删除方法是OnPostDelete
(或OnPostDeleteAsync
)。
因此,可以更新为:
public void OnPostDelete(int id)
{
}
docs状态:
按照惯例,处理程序方法的名称是根据 根据方案的处理程序参数的值
OnPost[handler]Async
此外,Async
后缀是可选的:
Async
命名后缀是可选的,但通常由惯例使用 用于异步功能。
答案 1 :(得分:1)
没有OnDelete
/ OnPut
。这是因为Razor页面直接面向Web视图,即在浏览器标签/窗口中显示的页面。浏览器没有本机发送DELETE / PUT请求的方法,因此没有理由支持它们。而是通过HTML表单元素处理此类任务,该表单元素将通过POST发送。因此,您可以使用OnPost()
来处理它。
文档建议使用自己的OnGet
和OnPost
方法(专门用于处理删除操作)创建一个用于删除的新Razor页面。或者,您可以简单地以OnPost[Something]
的形式向现有Razor页面添加一个附加处理程序。对于删除,可能为OnPostDelete
,而对于更新,您可能为OnPostUpdate
。名称无所谓,只是您需要将其作为handler
传递,例如:
<form asp-page="Foo" asp-hander="Delete">
如果您需要通过瘦客户端(HttpClient
,AJAX,邮递员等)进行交互,则应完全避免使用Razor Pages,而应使用完全支持所有HTTP动词的传统控制器。