如何从ASHX内部访问RouteData?

我的网站有一个处理所有文件下载请求的处理程序(FileDownload.ashx)。

我最近将我的网站迁移到ASP.NET 4.0,现在它广泛使用路由。 处理页面请求(aspx)时一切正常,但它不能与我的处理程序一起工作 - 我遇到以下错误:

类型'.Handlers.FileDownload'不会从'System.Web.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。

请参阅这里以获取关于IIS6和IIS7的ASP.NET 4路由的优秀文章。

祝你好运!

链接地址: http://www.djcxy.com/p/46619.html

上一篇: How to access RouteData from within an ASHX?

下一篇: 400 Bad Request HTTP Response using a WCF POST via JQuery