从.aspx.cs传递参数至.ashx文件

3
我想向一个.ashx页面传递一个字符串。 通常我会在.aspx页面中设置参数,例如:Loader="TreeLoader.ashx?passedVariable=hello" 但是我想在.aspx.cs代码中以编程方式完成,因为值将会改变。 .ashx页面接受HTTPContext:
public void ProcessRequest(HttpContext context)
    {

是否有一种方法可以向上下文中添加参数,并以类似于以下方式获取参数:

string searchString = context.Request["searchString"];

什么是实现这一目标的最佳方法?
2个回答

6

正确的方法取决于控件从aspx文件传递到ashx的方式。如果处理程序是从服务器端调用的(使用Server.Transfer方法),则可以直接使用上下文对象。例如,在aspx.c文件中:

HttpContext.Current["key"] = data;
Server.Transfer("TreeLoader.ashx");

在ashx文件中。
public void ProcessRequest(HttpContext context)
{
    var data = context["key"];
    ...

优势在于您可以将实际对象作为数据传递(而不仅仅是字符串)。

如果调用将从客户端(浏览器)端进行,则需要将数据作为查询字符串参数传递 - 例如,TreeLoader.ashx?searchString=data 并在ashx中使用 context.Request["searchString"]


我无法从aspx页面将server.transfer传输到ashx页面。我得到的错误是 - 执行子请求时发生错误。 - Moiz Tankiwala
@MoizTankiwala,也许你的ashx路径是错误的,或者在你的ashx中有未处理的异常,或者你的aspx页面和ashx位于不同的应用程序中(同一网站但不同的应用程序)! - VinayC
aspx和ashx文件在同一文件夹位置中。我可以通过在浏览器中输入URL来调用ashx。 - Moiz Tankiwala
@MoizTankiwala,你得到了什么异常?你可以尝试将你的server.transfer调用放在try-catch块中 - 忽略ThreadAbortException并记录其他异常以获得更多详细信息,包括堆栈跟踪! - VinayC
我不确定在较新版本的.NET中是否有更改,但是在.NET Framework 4.5中,我需要像下面这样编写HttpContext: HttpContext.Current.Application["my_key"] = my_value; - Legion

0
你是如何从 .aspx.cs 调用树处理程序的?我认为它与 'TreeLoader.ashx?passedVariable=hello' 相同,例如:Response.Redirect("TreeLoader.ashx?passedVariable=hello")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接