asp.net核心剃须刀页面支持删除和放置请求

时间:2019-04-09 22:25:22

标签: c# asp.net-core .net-core

最近,我在asp.net核心剃须刀页面上了解到有关请求处理的信息,并说它支持使用约定的head请求:

public void OnHead()
{
}

效果很好。然后我也尝试使用相同的约定进行删除。

public void OnDelete()
{
}

但是,当我使用邮递员发送删除请求时,它返回了错误的请求(500)。我不确定是否需要提供其他配置才能使用删除请求。任何人都可以帮助我。

2 个答案:

答案 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()来处理它。

文档建议使用自己的OnGetOnPost方法(专门用于处理删除操作)创建一个用于删除的新Razor页面。或者,您可以简单地以OnPost[Something]的形式向现有Razor页面添加一个附加处理程序。对于删除,可能为OnPostDelete,而对于更新,您可能为OnPostUpdate。名称无所谓,只是您需要将其作为handler传递,例如:

<form asp-page="Foo" asp-hander="Delete">

如果您需要通过瘦客户端(HttpClient,AJAX,邮递员等)进行交互,则应完全避免使用Razor Pages,而应使用完全支持所有HTTP动词的传统控制器。