Когда / Где я должен создать следующий класс в моем проекте ASP.NET MVC? - PullRequest
2 голосов
/ 02 марта 2010

У меня есть простой класс, который содержит некоторую общую информацию о текущем веб-сайте: -

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}"
);

и вот пример URL:

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

В настоящее время я занимаюсь извлечением apikey через пользовательский ActionFilter. Это Кьюл. Но я не уверен, как я могу извлечь versiondate (т.е.

Сначала я думал о том, чтобы сделать это:

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 был нулевым, в абстрактном контроллере. Фактически, большая часть информации в абстрактном контроллере была нулевой.

Так что я не уверен, когда нужно читать эти значения и создавать этот класс.

У кого-нибудь есть идея?

1 Ответ

2 голосов
/ 02 марта 2010

Возможно, вы захотите попробовать сделать это в методе 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...