如何从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