【问题标题】:How to send data to httphandler如何向httphandler发送数据
【发布时间】:2012-06-29 22:32:52
【问题描述】:

我在一个页面上有一个链接,它会回发。

    otherOptionsContainer.Controls.Add(new LiteralControl(String.Format("<a href='{0}' onclick='return {1}.exportItems();'>Export</a><br/>", exportURL, this._clientInstanceName)));

和http处理程序

                byte[] ms_excel = some_params_from_code
                MemoryStream ms_excel_tream = new MemoryStream(ms_excel);
                context.Response.ContentType = CONTENT_TYPE_MS_EXCEL;
                String dateNow=DateTime.Now.ToString("dd-MMM-yyyy_HH_mm", new System.Globalization.CultureInfo("en-US"));
                context.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=Export_{0}.xls", dateNow));
                ms_excel_tream.WriteTo(context.Response.OutputStream);
                ms_excel_tream.Close();  

我需要将 some_params_from_code 发送到 httpHandler。我有一些限制。 1.不要使用查询字符串 2. 不要使用 Cookies

我试图像这样使用 ajax 发送数据

$.ajax({
    url: "_Layouts/blah/blahHandler.ashx",
    contentType: "application/json; charset=utf-8",
        data: { 'key1':'value1'},
        dataType: "json",
        success: OnComplete,
        error: OnFail
    });

但是 http 处理程序写入另一个响应对象。或者另一个上下文来到处理程序。

【问题讨论】:

  • ssome_params_from_code 应该来自哪里?服务器端?客户端传入你的 json 对象?它不是真的很清楚
  • ssome_params_from_code 应该来自服务器端。在我的 json 示例中,我将它从服务器端传递到客户端,然后使用 json 从客户端发送。
  • 所以它就像您在服务器端使用的所有其他对象一样(查询字符串/cookie 在这里无关紧要)。如果它是您从 db 获得的东西,您可以通过 db 调用获得它,如果它是一个依赖于会话的对象,您可以从会话中检索它,等等。您需要提供有关此变量的更多信息以及究竟什么不起作用..跨度>
  • 当我点击链接()向我的处理程序发送地址时,我得到了我的 excel 文件。但是要将 some_params_from_code 传递给处理程序,我使用 Cookie。当我使用 ajax 请求时,我无法获取我的文件。

标签: c# asp.net post httphandler


【解决方案1】:

既然您唯一的限制是不使用查询字符串和 cookie,为什么不使用表单发布?考虑这个虚拟示例。

在您的 HTML 中:

<form id="form" action="DefaultHandler.ashx" method="post" style="display: none;">
    <input type="hidden" name="field1" value="abc" />
    <input type="hidden" name="field2" value="xyz" />
</form>
<a href="#" onclick="form.submit(); return false;">Handle</a>

在处理程序中:

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "text/plain";
    context.Response.Write("Received:\n");
    context.Response.Write(context.Request.Form["field1"]);
    context.Response.Write("\n");
    context.Response.Write(context.Request.Form["field2"]);
    context.Response.Write("\n");
}

根据您的需要进行调整。您可以在 JavaScript 中动态创建表单并根据需要设置字段。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2021-12-19
    • 2020-03-06
    • 2017-07-21
    相关资源
    最近更新 更多