我有一个基本控制器ApplicationController
,需要抓取URL主机并在触发子控制器之前进行一些处理。由于在初始化RequestContext之前触发了控制器构造函数,因此我必须重写Initialize方法来进行处理。
ApplicationController:
Protected Overrides Sub Initialize(ByVal requestContext As System.Web.Routing.RequestContext)
MyBase.Initialize(requestContext)
Dim host as String
host = Request.Url.Host.ToString
End Sub
在Initialize方法之前激活Controller Constructors背后的逻辑是什么?
还应该在Initialize Method中放置什么规则。
答案 0 :(得分:11)
假设构造函数是第一个在.NET类中被触发的实例方法,那不应该是一个惊喜,并不是MVC特有的东西。它更像是.NET框架的工作方式。
MVC框架需要首先实例化一个控制器,然后初始化它=>它首先调用构造函数。并且因为执行大量可能会抛出异常等的代码...并不总是最好放在构造函数中=>存在Initialize
方法。就这个方法而言,我必须承认我已经写了很多ASP.NET MVC代码而且从来没有使用它。动作过滤器似乎总是更好的选择。
所以回答你的问题:
还应该在Initialize Method中放置什么规则。
我从未放过任何代码,也从未需要覆盖此方法。我总是喜欢使用动作过滤器,因为这样我不再有义务从公共基本控制器派生(不是这是一个问题)。
答案 1 :(得分:-1)
有时,您可能希望自己的请求初始化变量,因此在这种情况下,您应该使用初始化方法。
例如,如果您想在请求是本地的时候以不同的方式初始化某些变量,等等。