如何在 .Net Core API 控制器中添加扩展方法

3

根据我的自定义对象的特定属性,我需要修改IActionResult

我尝试了不同的方法去更改它,但是都没有成功。

public static class ExtensionMethods
{

    public static IActionResult Change(this Controller controller, ExternalResponse obj)
    {
        if (case 1)
        {
            return Ok(extResp);
        }
        else if(case 2)
        {
            return NotFound(extResp);
        }
        else if(case 31)
        {
            return Unauthorized();
        }
        else
        {
            return BadRequest(extResp);
        }   
    }

    public static IActionResult ChangeTwo(this ControllerBase controller, ExternalResponse obj)
    {
        if (case 1)
        {
            return Ok(extResp);
        }
        else if(case 2)
        {
            return NotFound(extResp);
        }
        else if(case 31)
        {
            return Unauthorized();
        }
        else
        {
            return BadRequest(extResp);
        }   
    }
}

请建议我该怎么做。

你有两个返回类型为IActionResult的扩展方法。 - Llazar
它们只是一个示例。我先尝试了Controller类,然后是ControllerBase类,但都无法编译。 - Kamran Shahid
也许你需要先实现IActionResult,但是你为什么要修改它呢? - Llazar
你是如何从控制器中调用这些扩展方法的?是使用 This.Change 吗?你已经添加了命名空间吗?个人而言,我更喜欢创建自己的控制器类,并将常用的控制器方法放在其中,以便灵活地覆盖行为(如果需要的话)。例如:MyControllerBase : Controller。 - Migg
1
"但是两者都没有起作用" 请明确您的问题是什么:编译错误、运行时错误、它的行为与您预期的不同等。 - Martin Ullrich
从我的业务逻辑层,我正在返回一些对象。根据该对象的响应代码,我想返回不同的ActionResult,例如Ok(),notfound(),forbidden等。 但我不想在每个控制器方法中重复逻辑。 - Kamran Shahid
1个回答

1
实际问题是您无法为抽象类添加扩展方法,而ControllerBase在此处是一个抽象类。这里就是为什么您不能有这样的扩展方法。

这似乎是一个错误的说法。对抽象类使用扩展方法是可以的。 - Magnus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接