Har*_*han 3 c# .net-core asp.net-core
最近,我阅读了有关在 asp.net core razor 页面中处理请求的内容,它说它支持head使用约定的请求:
public void OnHead()
{
}
Run Code Online (Sandbox Code Playgroud)
它工作得很好。然后我也尝试使用相同的约定删除。
public void OnDelete()
{
}
Run Code Online (Sandbox Code Playgroud)
但是当我使用邮递员发送删除请求时,它返回一个错误的请求 (500)。我不确定是否需要提供额外的配置来使用删除请求。任何人都可以帮助我。
没有OnDelete/ OnPut。这是因为 Razor 页面直接面向 Web 视图,即在浏览器选项卡/窗口中显示的页面。浏览器中没有发送 DELETE/PUT 请求的本机方式,因此没有理由支持它们。相反,此类任务是通过 HTML 表单元素处理的,该元素将通过 POST 发送。因此,您将使用OnPost()它来处理它。
文档建议创建一个新的 Razor Page 用于删除,它有自己的方法OnGet和OnPost方法,专门用于处理删除。或者,您可以简单地以OnPost[Something]. 对于删除,可能是OnPostDelete,而对于更新,您可能有OnPostUpdate. 名称无关紧要,只是您需要将其作为以下内容传递handler:
<form asp-page="Foo" asp-handler="Delete">
Run Code Online (Sandbox Code Playgroud)
如果您需要通过瘦客户端(HttpClient、AJAX、Postman 等)进行交互,那么您应该完全避免使用 Razor Pages 并坚持使用完全支持所有 HTTP 动词的传统控制器。
假设您有这样的标记:
<button type="submit" asp-page-handler="delete"
asp-route-id="@contact.Id">delete</button>
Run Code Online (Sandbox Code Playgroud)
正确的删除方法是OnPostDelete(或OnPostDeleteAsync)。
所以,可以更新为:
public void OnPostDelete(int id)
{
}
Run Code Online (Sandbox Code Playgroud)
该文档说明:
按照惯例,根据scheme根据handler参数的值选择handler方法的名字
OnPost[handler]Async
此外,Async后缀是可选的:
该
Async命名后缀是可选的,但往往是异步函数使用的约定。
| 归档时间: |
|
| 查看次数: |
3574 次 |
| 最近记录: |