在Application_Start()中生成一个URL

时间:2016-11-24 12:02:44

标签: asp.net-mvc t4mvc

我知道可以使用TlMVC根据使用UrlHelper()的特定操作生成URL。请参阅SOhere。但是,由于ABP要求,我最终需要在 Application_Start()期间执行此操作。

所以在Application_Start()中实际上我有:

  //Areas
  AreaRegistration.RegisterAllAreas();

  //Routes
  RouteConfig.RegisterRoutes(RouteTable.Routes);

  //Get the URL
  var urlHelper = new UrlHelper();
  var url =  urlHelper.ActionAbsolute(MVC.Home.Index())

然而,这会引发以下例外情况:

'UrlHelper.ActionAbsolute(MVC.Home.Index())' threw an exception of type 'System.NullReferenceException'
    Data: {System.Collections.ListDictionaryInternal}
    HResult: -2147467261
    HelpLink: null
    InnerException: null
    Message: "Object reference not set to an instance of an object."
    Source: "T4MVCExtensions"
    StackTrace: "   at System.Web.Mvc.T4Extensions.ActionAbsolute(UrlHelper urlHelper, ActionResult result)"
    TargetSite: {System.String ActionAbsolute(System.Web.Mvc.UrlHelper, System.Web.Mvc.ActionResult)}

但是,如果我检查事物的内容(在运行时),它们似乎都被填充:

MVC.Home.Index()

{T4MVC_System_Web_Mvc_ActionResult}
    Action: "Index"
    Controller: "Home"
    Protocol: null
    RouteValueDictionary: {System.Web.Routing.RouteValueDictionary}

MVC.Home.Index()。GetRouteValueDictionary()

{System.Web.Routing.RouteValueDictionary}
    Count: 3
    Keys: Count = 3
    Values: Count = 3
    Results View: Expanding the Results View will enumerate the IEnumerable

所以任何人都可以解释为什么会爆炸?或者换一种方式如何在Application_Start()中使用T4MVC获取动作的绝对URL?

1 个答案:

答案 0 :(得分:0)

您提供的链接之间的共同主题是这些调用是在一个操作中进行的,这意味着请求已经实现。意味着上下文已经存在。在启动时,还没有任何请求。这就是你收到错误的原因。