【问题标题】:Razor : asp-page-handler doesn't trigger handler and throw 400 ErrorRazor:asp-page-handler 不会触发处理程序并抛出 400 错误
【发布时间】:2021-03-29 18:38:35
【问题描述】:

我需要从带有剃刀页面的购物车中删除一个项目。为此,我使用了带有 asp-page-handler 的表单。

购物车.cshtml:

<td class="text-center">
            <form asp-page-handler="Remove" method="post">
                <input type="hidden" name="id" value="@line.Product.Id" />
                <input type="hidden" name="returnUrl" value="@Model.ReturnUrl" />
                <button type="submit" class="btn btn-sm btn-danger">
                    Remove
                </button>
            </form>
</td>

我的 Cart.html.cs 有一个 OnPostRemove 方法,如下所示:

public IActionResult OnPostRemove(int id, string returnUrl)
    {
        Cart.RemoveLine(Cart.Lines.First(cl =>
            cl.Product.Id == id).Product);
        return RedirectToPage(new { returnUrl = returnUrl });
    }

当我单击删除按钮时,我收到 400 错误,并且我的 OnPostRemove 方法没有触发。

更新

我在我的 _ViewImports.cshtml 中包含了标签助手并解决了问题。

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

【问题讨论】:

  • 嗨@İsmetKonuç,关于这个案例的任何更新?你解决了这个问题吗?
  • 我在我的 _ViewImports.cshtml 中包含了标签助手并解决了问题。
  • 如果不在the_ViewImports.cshtml文件中添加@addTagHelper指令,带有asp-page-handler的表单标签将无法很好地渲染,可能会导致500错误,你确定会导致400错误吗?
  • 如果您按照我的建议使用 F12 开发人员工具“网络”选项卡中发布的数据检查实际请求,您会发现处理程序名称不包含在请求 URL 的查询字符串或路由数据中,如果标签帮助程序是视图不可用。

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


【解决方案1】:

将页面处理程序放在提交按钮标签内。

<form method="post">
    ...
    <button type="submit" asp-page-handler="Remove">
        Remove
    </button>
</form>

【讨论】:

    【解决方案2】:

    您分享的代码 sn-p 看起来不错,与我这边的测试数据配合得很好。

    当我单击删除按钮时,我收到 400 错误,并且我的 OnPostRemove 方法没有触发。

    如需排查问题,请在 F12 开发者工具“网络”选项卡中查看实际请求。

    请注意,如果启用了antiforgery token validation,但请求不包含有效的防伪令牌或防伪cookie有问题,也会导致400 Bad Request错误。

    出于测试目的,您可以尝试通过在页面模型类上应用IgnoreAntiforgeryTokenAttribute 来跳过防伪令牌验证,然后检查请求是否可以按预期处理。

    [IgnoreAntiforgeryToken]
    public class CartModel : PageModel
    { 
    

    【讨论】:

      猜你喜欢
      • 2018-10-10
      • 1970-01-01
      • 2016-01-30
      • 2015-07-07
      • 2011-08-17
      • 1970-01-01
      • 2019-01-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多