You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Umbraco V10中能否用Surface Controller实现全CRUD操作?

Umbraco V10 Surface Controller 完整CRUD实现指南

1. 能否使用Delete/Patch方法?

答案是可以,你遇到的405错误主要源于两个关键点:

  • Umbraco Surface Controller默认启用AntiForgery验证,DELETE/PATCH请求如果未携带验证Token,会被ASP.NET Core拦截返回405。
  • 传统HTML表单仅支持GET/POST方法,直接用表单提交DELETE请求会被浏览器自动转换,或触发服务器的方法限制。

解决方法:

要让Delete方法正常运行,你可以按以下方式处理:

  1. 携带AntiForgery Token发送请求:
    用AJAX发送DELETE请求时,在请求头中带上页面生成的验证Token,示例代码:
    fetch('/umbraco/surface/delete/delete', {
      method: 'DELETE',
      headers: {
        'RequestVerificationToken': document.querySelector('input[name="__RequestVerificationToken"]').value
      }
    })
    
  2. 明确路由标记(可选):
    给控制器方法指定专属路由,避免与其他路由冲突,代码示例:
    public class DeleteController : SurfaceController
    {
        [HttpDelete("umbraco/surface/delete/removeitem")]
        public IActionResult Delete()
        {
            // 你的删除逻辑
            return Ok();
        }
    }
    
  3. 临时关闭AntiForgery验证(不推荐公开接口使用):
    给方法添加[IgnoreAntiforgeryToken]特性跳过验证:
    [HttpDelete]
    [IgnoreAntiforgeryToken]
    public IActionResult Delete()
    {
        // 删除逻辑
    }
    

PATCH方法的实现逻辑与DELETE一致,使用[HttpPatch]标记即可,同样需要处理验证Token和请求方式的问题。

2. 单个Surface Controller是否可以包含多个方法?

完全可以,不需要为每个方法单独创建控制器。实际上,将相关CRUD方法聚合到同一个Surface Controller中是更合理的代码组织方式,比如创建ProductSurfaceController,集中处理产品的增删改查操作,只要通过[HttpGet]/[HttpPost]/[HttpDelete]等特性或路由参数区分方法即可。示例代码:

public class ProductSurfaceController : SurfaceController
{
    [HttpGet("umbraco/surface/product/get/{id}")]
    public IActionResult GetProduct(int id)
    {
        // 获取产品逻辑
    }

    [HttpPost("umbraco/surface/product/create")]
    public IActionResult CreateProduct(ProductViewModel model)
    {
        // 创建产品逻辑
    }

    [HttpDelete("umbraco/surface/product/delete/{id}")]
    public IActionResult DeleteProduct(int id)
    {
        // 删除产品逻辑
    }
}

这种方式符合单一职责原则,也更便于后续维护。

内容的提问来源于stack exchange,提问作者anvbis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:35:07