我有许多控制器,我希望它们都有一个PageConfiguration
对象的接口,需要根据URL创建。除了在操作方法中创建接口之外,我不确定如何执行此操作,因为它们可以访问Request.QueryString
,而控制器构造函数则不能访问。我是否需要在Application_BeginRequest
中创建全局对象?我可以采取什么方法来满足这一要求?感谢
编辑:此代码概述了我正在尝试做的事情:
public class ResultsController : Controller
{
private IPageConfiguration page;
public ResultsController()
{
page = new PageConfiguration("?"); // needs value from query string
}
}
public class FactsheetController : Controller
{
private IPageConfiguration page;
public FactsheetController()
{
page = new PageConfiguration("?"); // needs value from query string
}
}
答案 0 :(得分:3)
最简单的方法是创建一个动作过滤器。做这些:
true
。通过这种方式,您可以使查询字符串处理变得通用和自动化,因为您不必将此操作过滤器附加到所有操作。它已经通过继承附加到所有子控制器类。
答案 1 :(得分:2)
您可以使用Initialize方法。有一个定义此受保护属性的基本控制器,并在Initialize
方法中设置该值。然后,当所有控制器都从基本控制器派生时,他们将可以访问该属性。
答案 2 :(得分:0)
好吧,创建一个全局对象会让我觉得有问题,因为您可能会一次处理多个请求。在会话状态下创建对象会好一些,因为默认情况下MVC序列化会话中的所有请求,但您将来仍可能遇到并发问题。老实说,我认为最好的方法就是在每个需要它的动作方法中创建对象。
答案 3 :(得分:0)
执行此操作的一种方法是使用操作过滤器。您可以看到一个简单的示例here。