何时/何处我应该在ASP.NET MVC项目中创建以下类?

时间:2010-03-02 02:15:59

标签: c# asp.net-mvc api

我有一个简单的类,其中包含有关当前网站的一些常规信息: -

public class WebSiteSettings
{
    public EnvironmentType Environment { get; set } // Eg. Production
    public VersionType Version { get; set; } // Eg. Version2
    public string ApiKey { get; set; } // Eg. ABCDE-1234
}

现在,我希望有以下路线: -

// Api - Search methods.
routes.MapRoute(
    "Search Methods",
    "{versionDate}/{controller}/{action}"
);

这是一个示例网址:

  

http://localhost.api.mydomain.com:1234/2010-01-23/search/posts?user=JonSkeet&apikey=ABCDE-1234

我目前正在处理通过自定义ActionFilter检索apikey的问题。这是kewl。但我不知道如何从网址中提取versiondate(即2010-01-23)并填充我所做的那个简单的类..所有控制器也可以访问它。

我最初想的是这样做:

public abstract class AbstractController : Controller
{
    protected WebSiteSettings WebSiteSettings { get; set; }

    protected AbstractController() : base()
    {
        WebSiteSettings = new WebSiteSettings();
        // 1. Read in the version data and figure out the version number.
        // 2. Read in the app settings to figure out the environment. (easy to do).
        // 3. No api key just yet. this will be handled in the OnAuthorization action filter.
    }
}

public class SearchController : AbstractController
{
    public ActionResult Posts(..)
    { // ... blah ... }
}

所以,我在抽象控制器中尝试了这个并且RouteData为null。实际上,在抽象控制器中,大多数信息都是null。

所以我不确定何时适当的地方是读取这些值并创建该类。

有人有想法吗?

1 个答案:

答案 0 :(得分:2)

您可能想尝试在AbstractController.OnActionExecuting方法中执行该操作,构造函数为时尚早。

protected override void OnActionExecuting(ActionExecutingContext context)
{
    // context has all the goods
}

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.onactionexecuting.aspx?ppud=4