【问题标题】:C# generic handler not getting data from postC# 通用处理程序没有从帖子中获取数据
【发布时间】:2017-03-15 00:36:24
【问题描述】:

我正在做一个简单的 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>

我有一些代码,在单击按钮时会调用输入的单击事件。加载输入后,将调用以下内容(我可以设置断点并到达此处)。

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

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

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 调用中。处理程序将收到一个帖子,但数据正在被剥离。

【问题讨论】:

  • 你可能需要给你的输入元素一个name属性。

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


【解决方案1】:

您需要试用以下代码才能使其正常工作 用户端代码 $('#btnUpload').click(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;
}
}

【讨论】:

    猜你喜欢
    • 2020-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    相关资源
    最近更新 更多