2011-07-28 16 views
6

Tengo una IHttpHandler con el siguiente método ProcessRequest:Server.Transfer a un HttpHandler

public void ProcessRequest(HttpContext context) { 
    int id = Convert.ToInt32(context.Request.QueryString["id"] + 151); 
    var xml = XDocument.Parse("<xml><cartid>" + id + "</cartid></xml>"); 
    context.Response.Write(xml); 
} 

¿Qué estoy tratando de usar desde una página aspx de la siguiente manera:

protected void Page_Load(object sender, EventArgs e) { 
    order o = new order(); 
    Server.Transfer(o, false); 
} 

consigo una HttpException: Error al ejecutar la solicitud secundaria para el manejador 'PostTest.order'.

Si en lugar de tratar de hacer la transferencia como:

Server.Transfer("~/order.ashx?id=65", false) 

Obtengo un HttpException: Error al ejecutar solicitud secundaria para /order.ashx.

¿Estoy haciendo esto mal o hay otra manera de lograr lo que quiero?

+0

alguna irregularidad con el uso de Response.Redirect()? – tomfanning

+0

La página aspx está recibiendo una POST con datos de otro servidor (no del navegador de un usuario) y no estoy seguro de que vaya a redireccionar, pero lo intentaré. – jhunter

+0

¿Por qué no hacer que su otro servidor llame directamente al controlador y traslade la lógica necesaria desde su página ASPX hasta allí? Una página ASPX realmente no será un buen punto final para que otro servidor llame. – tomfanning

Respuesta

12

sólo tiene que pasar el contexto:

var handler = new order(); 
handler.ProcessRequest(Context); 
Response.End(); 
+0

Eso es realmente genial. He estado usando ASP.NET durante AÑOS y no sabía esto. – tomfanning

+0

usando el código anterior puedo pasar algo en la solicitud y obtener respuesta del manejador –

+0

sí: 'Context.Response.Write (Context.Request [x])' –

Cuestiones relacionadas