Пользовательский маршрут не вызывается для приложения ASP.NET MVC 3 .NET 4 - PullRequest
0 голосов
/ 18 декабря 2011

Я пытался создать собственный маршрут для файла * .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

1 Ответ

0 голосов
/ 23 декабря 2011

Первым делом: проверили ли вы, что он не работает, если указать дополнительный mimetype application / ogg, сопоставленный с файлами .ogg, либо в разделе IIS, либо в разделе веб-сервера web.config?проблема в том, что ваша регистрация маршрута будет соответствовать только одному сегменту URL (/filename.ogg).Вы должны указать свой шаблон маршрута как {* musicpath} /. Ogg

В-третьих, более стилистически, чем другие, вы должны создать класс oggroutehandler, который будет обрабатывать ogghttphandler.Таким образом вы сохраняете разделение между двумя компетенциями.

Извините, я не смог проверить это лучше, но я на смартфоне :) HTH

Simone

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