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

2

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

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. Это kewl. Но я не уверен, как я могу извлечь versiondate (то есть. 2010-01-23) из URL-адреса и заполнить этот простой класс, который я сделал, и все контроллеры тоже будут иметь доступ.

Я изначально думал об этом:

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

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

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

Теги:
asp.net-mvc

1 ответ

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

  • 0
    Да, это выглядит как подходящее место для меня. +1
  • 0
    Ага. Подтверждено. Не знал, что ты мог бы делать дат. Соус офигенный.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню