Реализация сайта WAP с использованием ASP.NET-MVC
Мы планируем реализовать WAP-сайт с использованием ASP.NET-MVC.
У кого-нибудь есть опыт? Есть ли Gotchas?
Мы также будем внедрять "стандартный" веб-сайт для браузеров. Возможно ли иметь один набор моделей и контроллеров и иметь отдельные представления для каждого сайта?
1 ответ
Можно по большей части иметь единый набор моделей и контроллеров. Способ сделать это будет через реализацию следующего движка Theming / Templating. [Поддержка Theming][1] Я добавил свое решение поверх движка Theming / Templating.
Основное отклонение от источника статьи находится в файле Global.asax.cs, в который необходимо добавить следующие строки кода:
protected void Application_BeginRequest(Object Sender, EventArgs e)
{
SetTheme();
}
//this will set the responses Content Type to xhtml and is necessary as C# sends the WML response header
protected void Application_PreSendRequestHeaders(Object Sender, EventArgs e)
{
if (this.Context.Items["themeName"].ToString() == "xhtml")
{
this.Context.Response.ContentType = "application/vnd.wap.xhtml+xml";
}
}
private void SetTheme()
{
//set the content type for the ViewEngine to utilize.
HttpContext context = this.Context;
MobileCapabilities currentCapabilities = (MobileCapabilities)context.Request.Browser;
String prefMime = currentCapabilities.PreferredRenderingMime;
string accept = context.Request.ServerVariables["HTTP_ACCEPT"];
context.Items.Remove("theme");
context.Items.Remove("themeName");
if (accept.Contains("application/vnd.wap.xhtml+xml"))
{
context.Items.Add("themeName", "xhtml");
}
else if (prefMime == "text/vnd.wap.wml")
{
context.Items.Add("themeName", "WAP");
}
if (!context.Items.Contains("themeName"))
{
context.Items.Add("themeName", "Default");
}
}
Я знаю, что мне пришлось сделать несколько изменений кода, чтобы сделать его совместимым с MVC 1, но я не могу вспомнить точные изменения. Другая важная проблема, с которой я столкнулся, была отладка вывода. Для этого я использовал Firefox с расширением ([User Agent Switcher][2]), который я изменил, чтобы добавить в него типы принятия.
Для WAP2/XHTML1.2 допустимы следующие типы: текст /html,application/vnd.wap.xhtml+xml,application/xhtml+xml,application/xml;q=0,9,/; q = 0,8
Очевидно, что вам нужна ваша главная страница и страницы с содержанием, чтобы придерживаться WML или XHTML1.2
[1]: http://frugalcoder.us/post/2008/11/13/ASPNet-MVC-Theming.aspx Тематическая поддержка
[2]: http://chrispederick.com/work/user-agent-switcher/ User Agent Switcher