gpt4 book ai didi

c# - 在 Controller 上下文可用之前查找请求是否为子操作请求

转载 作者:太空狗 更新时间:2023-10-30 00:41:15 26 4
gpt4 key购买 nike

在一个简单的 mvc 4 应用程序中,我安装了 Ninject.MVC3 nuget 包。

这是我的 Controller ,非常基本,ISomeClass 正在通过 ninject 注入(inject)到构造函数中。

public class HomeController : Controller
{
private readonly ISomeClass _someClass;

public HomeController(ISomeClass someclass)
{
_someClass = someclass;
}

public ActionResult Index()
{
return View();
}

[ChildActionOnly]
public PartialViewResult MiniView()
{
return PartialView("miniview", _someClass.GetName());
}
}

这是 SomeClass

public class SomeClass : ISomeClass
{
private readonly string _someName;

public SomeClass(string someName)
{
_someName = someName;
}

public string GetName()
{
return _someName;
}
}

在 Index.cshtml View 中我有

@{ Html.RenderAction("MiniView","Home"); }

现在在 NinjectWebCommon 中,当我去注册服务时,我需要知道该请求是否是子操作请求。就像我调用 Html.RenderAction 时一样。这就是我正在尝试的方法,但它不起作用。

kernel.Bind<ISomeClass>().To<SomeClass>()
.WithConstructorArgument("someName", c => IsChildAction(c) ? "Child" : "Nope");

IsChildAction 方法 - 始终返回 false。

private static bool IsChildAction(Ninject.Activation.IContext c)
{
var handler = HttpContext.Current.Handler;

/*Cant do this, ChildActionMvcHandler is internal*/
return handler is System.Web.Mvc.Html.ChildActionExtensions.ChildActionMvcHandler;

//OR

//This is how ControllerContext.IsChildAction gets its value in System.Web.Mvc but
//RouteData.DataTokens is empty for me
return ((MvcHandler)handler).RequestContext.RouteData.DataTokens
.ContainsKey("ParentActionViewContext");
}

有什么想法可以做到吗?

ps:这不是实际代码,只是尝试一些东西。这是我绝对不应该做的事情吗?为什么?

最佳答案

我最终检查了当前请求是否有先前的处理程序。似乎它仅针对子操作设置。

HttpContext.Current.PreviousHandler != null && 
HttpContext.Current.PreviousHandler is MvcHandler;

关于c# - 在 Controller 上下文可用之前查找请求是否为子操作请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21929557/

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