我有一个简单的类,其中包含有关当前网站的一些常规信息: -
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。
所以我不确定何时适当的地方是读取这些值并创建该类。
有人有想法吗?
答案 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