C# 如何使用SVC处理ajax上传文件?

C# 如何使用SVC处理ajax上传文件?,c#,jquery,rest,file-upload,svc,C#,Jquery,Rest,File Upload,Svc,我正在尝试使用jQueryAjax将单个文件(而不是图像)上载到WCFWeb服务(svc)。我终于获得了用于传输的web.config,我的SVC正在接收一些东西,但是我不知道如何获取和处理传入的表单内容 <input id="ipt_file" type="file" /> <a href='#' onclick="UploadFile();" data-role='button'>Upload</a> 不幸的是,request.Form[“file”

我正在尝试使用jQueryAjax将单个文件(而不是图像)上载到WCFWeb服务(svc)。我终于获得了用于传输的web.config,我的SVC正在接收一些东西,但是我不知道如何获取和处理传入的表单内容

<input id="ipt_file" type="file" />
<a href='#' onclick="UploadFile();" data-role='button'>Upload</a>


不幸的是,request.Form[“file”]、request.Form[0]和request.Params似乎不起作用,尽管我读了很多文章,但这些声明都不起作用。如果我不能访问请求主体,我就不能创建字节数组、流或将其声明为HttpPostedFile。。。(实际上,我要做的就是设置一个新的请求,将它和一些额外的参数传递给数据服务)


我遗漏了什么?

是您的
ipt\u文件
输入被
包装了吗?是的。我发现SVC令人难以置信地沮丧,最终选择使用ashx代替。
var UploadFile = function () {
    var file_object = $('#ipt_file')[0].files[0];
    var form_data = new FormData();
    form_data.append('file', file_object);

    var xhr_upload = $.ajax({
        type: "POST",
        headers: { "Cache-Control":"no-cache", "X-Session":"12345678" },
        url: "../Upload.svc/UploadJobFile",
        data: form_data,
        processData: false,
        contentType: false,
        dataType: "json",
        success: function (msg) {
            if (typeof (msg) === "object") {
                var _upload = $.parseJSON(msg.d);
                alert(_upload.status + ': ' + _upload.msg);
            };
        }
    });
};
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Upload
{
    [OperationContract(Name="UploadJobFile")]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedResponse, ResponseFormat = WebMessageFormat.Json)]
    [return: MessageParameter(Name = "d")]
    public string UploadJobFile() 
    {
        string response = string.Empty;
        HttpRequest request = HttpContext.Current.Request;
        string session_id = request.Headers["X-Session"];
        //
        // ??? need the request file or body
        //
        if (request.ContentLength > 0)
        {
            response = "OK, content length= " + request.ContentLength.ToString(); // works, returns ~ file size
        }
        else
        {
            response = "fail";
        }
        return response;
    }
}