Я пытался создать собственный маршрут для файла * .ogg, который воспроизводится на веб-сайте с аудиотэгом HTML 5.
Дело в том, что FireFox не воспроизводит ogg, если мы не предоставляем application / ogg как ContentType.
В отличие от Chrome играет OGG без дополнительной работы.
Кстати, я думаю, что пользовательский маршрут и его регистрация в Global.asax - это хорошее решение и многократно используемый код.
Для каждого пути с расширением .ogg сервер отправляет файл ogg с помощью application / ogg ContentType.
Проблема в том, что я не знаю, почему путь с * .ogg не обрабатывается с помощью пользовательского маршрута.
Это мой код для OggHandler.cs
public class OggHandler : IRouteHandler, IHttpHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return this;
}
/// <summary>
/// process ogg file
/// </summary>
/// <param name="context"></param>
public void ProcessRequest(HttpContext context)
{
var request = context.Request;
var response = context.Response;
try
{
//response ogg file with Content Type Header
response.ContentType = "application/ogg";
response.WriteFile(request.PhysicalPath);
}
catch (Exception ex)
{
response.Write("<html>\r\n");
response.Write("<head><title>Ogg HTTP Handler</title></head>\r\n");
response.Write("<body>\r\n");
response.Write("<h1>" + ex.Message + "</h1>\r\n");
response.Write("</body>\r\n");
response.Write("</html>");
}
}
public bool IsReusable
{
get { return true; }
}
}
и регистрация в Global.asax
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new Route
(
"{resource}.ogg/{*pathInfo}"
, new OggHandler()
));
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
}
Надеюсь получить хорошее предложение от всех вас. :)
В последнее время я также прикрепил простой файл проекта в виде следующей ссылки.
http://codesanook.com/shared/MvcOgg.zip