C# 请求。表单发布变量为空

C# 请求。表单发布变量为空,c#,.net,ajax,C#,.net,Ajax,我已经使用浏览器调试器/网络监视器验证了我正在AJAX调用中发送一个名为“search”的变量,并且在监视器中它在标题中显示为“search=test”。我试图在代码中访问此变量,但似乎找不到它?这是我的前端和后端代码,我遗漏了什么吗 代码隐藏: public class AJAXSearchLog : IHttpHandler { public void ProcessRequest (HttpContext context) { context.Response.C

我已经使用浏览器调试器/网络监视器验证了我正在AJAX调用中发送一个名为“search”的变量,并且在监视器中它在标题中显示为“search=test”。我试图在代码中访问此变量,但似乎找不到它?这是我的前端和后端代码,我遗漏了什么吗

代码隐藏:

public class AJAXSearchLog : IHttpHandler {

    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        string searchTerm = Convert.ToString(HttpContext.Current.Request.Form["search"]);
        if(!string.IsNullOrEmpty(searchTerm)){
           AspDotNetStorefrontCore.DB.ExecuteSQL("insert into TribSearch(SearchTerm,CustomerID,LocaleSetting) values(" + DB.SQuote(CommonLogic.Ellipses(searchTerm, 97, true)) + "," + '0' + "," + DB.SQuote("en-us") + ")");
        }
        context.Response.Clear();
        context.Response.Write(searchTerm);
        context.Response.End();
    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}
前端

  window.onbeforeunload = function(e) {
        if ($("#searchBox_text").val().length >= 2) {
        var _search = $("#searchBox_text").val();
            var url = "/AJAXSearchLog.ashx";
            $.ajax({
                async: false,
                type: 'POST',
                url: url,
                data: {'search': _search},
                contentType: 'application/json;',
                dataType: 'json',
                success: function(result) {
                    alert(result);
                },
                error: function(xhr, textStatus, errorThrown) {
                    console.log('error');
                }
            });
        }
    };

我发现当
contentType
设置为“application/json”时,数据没有通过。此外,要读取POST变量,需要使用
Request.Params[]
。以下是我更改的两行代码:

在前端-
contentType:'application/x-www-form-urlencoded;字符集=UTF-8',

在后端-
stringsearchTerm=Convert.ToString(context.Request.Params[“search”])

这不太可能是原因,但查询HttpContext.Current.Request.Form而不是context.Request.Form似乎不太合适。如果在处理程序代码中设置断点,调试时是否会拾取它?如果没有,请确保您已在web.config文件中正确注册了处理程序。@NeilMoss我能够成功地命中代码中的断点,但它只是将我指定为
Request.Form[“search”]
的字符串读取为null。谢谢!您列出的内容类型是我缺少的内容类型。我发现使用
context.Request.Form[“search”]
也可以做到这一点。