Мой веб-сайт имеет обработчик (FileDownload.ashx), который имеет дело со всеми запросами загрузки файла.
Я недавно переместил свой сайт в ASP.NET 4.0, и он теперь использует маршрутизацию экстенсивно. Все хорошо работает при контакте с запросами страницы (aspx), но это не работает с моим обработчиком - я встречаюсь со следующей ошибкой:
Введите '.Handlers. FileDownload' не наследовался 'Системе. Сеть. UI.Page'.
Это имеет смысл, поскольку маршрутизация только реализована на странице.
Какие шаги я должен сделать, чтобы смочь использовать маршрутизацию и мой .ashx вместе? Я хочу смочь извлечь RouteData.Values
от маршрута.
public class FileDownload : IHttpHandler
{
}
В конце концов, мне нужно было создать обработчик, но это оказалось достаточно просто: http://haacked.com/archive/2009/11/04/routehandler-for-http-handlers.aspx
.Net 4.0 изначально не поддерживает обработку маршрутов для IHttpHandlers.
Похоже на проблему с IIS.
Работает ли это, если вы попытаетесь использовать сервер разработки ASP.NET (Cassini)?
Если вы используете IIS6, вам нужно будет использовать подстановочные символы сопоставления приложений - см. здесь .
Вам также нужно будет создать маршруты в соответствии с любой страницей 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.
Удачи!