gpt4 book ai didi

c# - ControllerDescriptor FindAction 返回 null

转载 作者:太空狗 更新时间:2023-10-29 18:20:24 25 4
gpt4 key购买 nike

Controller :

[HttpDelete]
public ActionResult Delete(int id)
{
}

方法:

ControllerBase controllerToLinkTo = string.IsNullOrEmpty(controllerName)
? htmlHelper.ViewContext.Controller
: GetControllerByName(htmlHelper, controllerName);

var controllerContext = new ControllerContext(htmlHelper.ViewContext.RequestContext, controllerToLinkTo);
var controllerDescriptor = new ReflectedControllerDescriptor(controllerToLinkTo.GetType());
ActionDescriptor actionDescriptor = controllerDescriptor.FindAction(controllerContext, actionName);

当 Action 具有 [Delete] 属性时,ActionDescriptor 为空。有没有办法从 Controller 上下文中获取操作名称?

最佳答案

我在 .net 4.5 中遇到了同样的问题,因为 FindAction 方法只搜索 get 属性。我解决了使用 GetCanonicalActions 方法添加第二个搜索的问题。

ControllerBase controllerToLinkTo = string.IsNullOrEmpty(controllerName)
? htmlHelper.ViewContext.Controller
: GetControllerByName(htmlHelper, controllerName);

var controllerContext = new ControllerContext(htmlHelper.ViewContext.RequestContext, controllerToLinkTo);
var controllerDescriptor = new ReflectedControllerDescriptor(controllerToLinkTo.GetType());
var actionDescriptor = controllerDescriptor.FindAction(controllerContext, actionName);

//add the following lines
if (actionDescriptor == null)
{
actionDescriptor = controllerDescriptor.GetCanonicalActions().FirstOrDefault(a => a.ActionName == actionName);
}

注意:我使用的是linq方法FirstOrDefault,所以记得添加using System.Linq;

关于c# - ControllerDescriptor FindAction 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13722826/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com