C#通用处理程序无法从帖子中获取数据

时间:2016-11-01 19:37:18

标签: c# asp.net webforms generic-handler

我正在做一个应该收到表单帖子的简单c#泛型处理程序。这是表格......

<form id="frmUploadImage" action="../Handlers/LocalImageUploadHandler.ashx" method="post" style="display: none">
    <div>
        <input style="display: none; margin-bottom: 20px" type="file" id="uploadImage" />
    </div>
</form>

我有一些代码,只需点击一个按钮就可以调用输入的click事件。加载输入时,会调用以下内容(我可以设置一个断点,然后它到达此处)。

var jqxhr = $.post('../Handlers/LocalImageUploadHandler.ashx', $('#frmUploadImage').serialize())
            .success(function() {
                alert('worked');
            })
            .error(function() {
                alert('failed');
            });

它将显示&#34;失败&#34;的警报。在服务器端,它在处理程序中调用它(我可以通过设置断点来验证它是否被调用)。

public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "application/octet-stream";
        var file = Convert.FromBase64String(context.Request.Form["uploadedFile"]);
//other stuff
}

有趣的是context.Request.Form和context.Request.Files属性中没有项目,即使它们正在发送。我所做的一切都没有奏效。我试过用XHR,jQuery等发帖。我已经尝试将数据从文件上传控件中拉出来作为DataUrl并将其序列化为base64编码的字符串并将其置于ajax调用中。处理程序将收到一个帖子,但数据正在被删除。

1 个答案:

答案 0 :(得分:0)

您需要试用以下代码才能使其正常运行 用户端代码 $(&#39;#btnUpload&#39;)。点击(function(){

var fileUpload = $("#FileUpload1").get(0);
var files = fileUpload.files;
var test = new FormData();
for (var i = 0; i < files.length; i++) {
test.append(files[i].name, files[i]);
}
$.ajax({
url: "LocalImageUploadHandler.ashx",
type: "POST",
contentType: false,
processData: false,
data: test,
// dataType: "json",
success: function (result) {
alert(result);
},
error: function (err) {
alert(err.statusText);
}
});
});

服务器端代码

public void ProcessRequest (HttpContext context) {
if (context.Request.Files.Count > 0)
{
HttpFileCollection files = context.Request.Files;
for (int i = 0; i < files.Count; i++)
{
HttpPostedFile file = files[i];
string fname;
if (HttpContext.Current.Request.Browser.Browser.ToUpper() == "IE" || HttpContext.Current.Request.Browser.Browser.ToUpper() == "INTERNETEXPLORER")
{
string[] testfiles = file.FileName.Split(new char[] { '\\' });
fname = testfiles[testfiles.Length - 1];
}
else
{
fname = file.FileName;
}
fname=Path.Combine(context.Server.MapPath("~/uploads/"), fname);
file.SaveAs(fname);
}
}
context.Response.ContentType = "text/plain";
context.Response.Write("File Uploaded Successfully!");
}
public bool IsReusable {
get {
return false;
}
}