ASP.Net 4.0 - Как получить доступ к RouteData из ASHX? - PullRequest
7 голосов
/ 29 июня 2010

Мой веб-сайт имеет обработчик (FileDownload.ashx), который обрабатывает все запросы на загрузку файлов.

Я недавно перенес свой сайт на ASP.NET 4.0, и теперь он широко использует маршрутизацию. Все отлично работает при работе с запросами страниц (aspx), но не работает с моим обработчиком - я сталкиваюсь со следующей ошибкой:

Тип '.Handlers.FileDownload' не наследуется от 'System.Web.UI.Page'.

Это имеет смысл, поскольку маршрутизация реализована только на странице.

Какие шаги мне нужно предпринять, чтобы иметь возможность использовать маршрутизацию и мой .ashx вместе? Я хочу иметь возможность извлечь RouteData.Values из маршрута.

public class FileDownload : IHttpHandler
{
}

Ответы [ 2 ]

3 голосов
/ 30 июня 2010

В конце концов мне нужно было вручную создать обработчик, но это было достаточно просто: http://haacked.com/archive/2009/11/04/routehandler-for-http-handlers.aspx

.Net 4.0 изначально не поддерживает обработку маршрутов для IHttpHandlers.

1 голос
/ 30 июня 2010

Похоже, проблема IIS.

Работает ли это, если вы пытаетесь использовать сервер разработки ASP.NET (Cassini)?

Если вы используете IIS6, вам нужноиспользуйте сопоставления приложений Wildcard - см. здесь .

Вам также все равно нужно будет создать маршруты для любой страницы ASPX, например:

public static void RegisterRoutes(RouteCollection routes)
{
    string[] allowedMethods = { "GET", "POST" };
    HttpMethodConstraint methodConstraints = new HttpMethodConstraint(allowedMethods);

    Route fileDownloadRoute = new Route("{foo}/{bar}", new FileDownload());
    fileDownloadRoute.Constraints = new RouteValueDictionary { { "httpMethod", methodConstraints } };

    routes.Add(fileDownloadRoute);
}

Есть ли у вассделал это?Если это так, я бы сказал, что ваша проблема определенно связана с IIS.

См. здесь для хорошей статьи о маршрутизации ASP.NET 4 для IIS6 и IIS7.Удачи!

...