使用jQueryAjax将FormData发送到C#WebAPI

使用jQueryAjax将FormData发送到C#WebAPI,c#,jquery,C#,Jquery,我有以下功能: public class UserRequest { public string RequestMessage { get; set; } public HttpPostedFileBase Photo { get; set; } } public void CreateRequest(UserRequest userRequest) { } 当我使用以下脚本发布到此函数时,发布的图像始终为空: var requestMessage =

我有以下功能:

public class UserRequest
{    
    public string RequestMessage { get; set; }
    public HttpPostedFileBase Photo { get; set; }
}        
public void CreateRequest(UserRequest userRequest)
{
}
当我使用以下脚本发布到此函数时,发布的图像始终为空:

var requestMessage = document.getElementById("txtReqMessage").value;
var inputFile = document.getElementById("reqphoto");
var imageFile = inputFile.files[0];

$.ajax({
     type: "POST",
     url: "/UserRequest/CreateRequest/",
     contentType: 'application/json; charset=utf-8',
     data: JSON.stringify({                      
        "RequestMessage": requestMessage,
        "Photo": imageFile
     }),
    success: function () {
        alert("Success");
} 
我阅读了有关发布复杂数据的内容,因此我将脚本更改为:

var requestMessage = document.getElementById("txtReqMessage").value;
var inputFile = document.getElementById("reqphoto");
var imageFile = inputFile.files[0];    

var formData = new FormData();
formData.append("RequestMessage", requestMessage);
formData.append("Photo", imageFile);   

    $.ajax({
       type: "POST",
       url: "/UserRequest/CreateRequest/",
       data: formData,
       dataType: 'json',
       contentType: false,
       processData: false,
       success: function () {                  
           alert("Success");
       }
});

但现在有点不对劲,我得到了错误500

将该方法定义为web方法

[WebMethod]
public void CreateRequest(UserRequest userRequest)
{

}

将该方法定义为web方法

[WebMethod]
public void CreateRequest(UserRequest userRequest)
{

}

将该方法定义为web方法

[WebMethod]
public void CreateRequest(UserRequest userRequest)
{

}

将该方法定义为web方法

[WebMethod]
public void CreateRequest(UserRequest userRequest)
{

}

您应该读取
表单datacollection中的数据

public void CreateRequest(FormDataCollection form)
{

}
尝试将
contentType
ajax属性更改为

contentType: 'multipart/form-data'

您使用的是
false
值,该值仅在发送文件时使用

您应该读取
表单数据采集中的数据

public void CreateRequest(FormDataCollection form)
{

}
尝试将
contentType
ajax属性更改为

contentType: 'multipart/form-data'

您使用的是
false
值,该值仅在发送文件时使用

您应该读取
表单数据采集中的数据

public void CreateRequest(FormDataCollection form)
{

}
尝试将
contentType
ajax属性更改为

contentType: 'multipart/form-data'

您使用的是
false
值,该值仅在发送文件时使用

您应该读取
表单数据采集中的数据

public void CreateRequest(FormDataCollection form)
{

}
尝试将
contentType
ajax属性更改为

contentType: 'multipart/form-data'
您使用的是
false
值,该值仅在发送文件时使用

我将其更改为:

public void CreateRequest()
        {

            var httpRequest = HttpContext.Current.Request;

            var userRequest = new UserRequest
            {                
                RequestMessage = httpRequest.Form["RequestMessage"],
                Photo = httpRequest.Files["RequestPhoto"],

            };                                               
        }



var formData = new FormData();            
formData.append("RequestMessage", requestMessage);
formData.append("RequestPhoto", imageFile);


$.ajax({
   type: "POST",
   url: "/UserRequest/CreateRequest",
   data: formData,      
   processData: false,
   success: function () {
    alert("OK");
   },
   error: function () {
    alert("Error");
 }
 });    
我把它改成这样:

public void CreateRequest()
        {

            var httpRequest = HttpContext.Current.Request;

            var userRequest = new UserRequest
            {                
                RequestMessage = httpRequest.Form["RequestMessage"],
                Photo = httpRequest.Files["RequestPhoto"],

            };                                               
        }



var formData = new FormData();            
formData.append("RequestMessage", requestMessage);
formData.append("RequestPhoto", imageFile);


$.ajax({
   type: "POST",
   url: "/UserRequest/CreateRequest",
   data: formData,      
   processData: false,
   success: function () {
    alert("OK");
   },
   error: function () {
    alert("Error");
 }
 });    
我把它改成这样:

public void CreateRequest()
        {

            var httpRequest = HttpContext.Current.Request;

            var userRequest = new UserRequest
            {                
                RequestMessage = httpRequest.Form["RequestMessage"],
                Photo = httpRequest.Files["RequestPhoto"],

            };                                               
        }



var formData = new FormData();            
formData.append("RequestMessage", requestMessage);
formData.append("RequestPhoto", imageFile);


$.ajax({
   type: "POST",
   url: "/UserRequest/CreateRequest",
   data: formData,      
   processData: false,
   success: function () {
    alert("OK");
   },
   error: function () {
    alert("Error");
 }
 });    
我把它改成这样:

public void CreateRequest()
        {

            var httpRequest = HttpContext.Current.Request;

            var userRequest = new UserRequest
            {                
                RequestMessage = httpRequest.Form["RequestMessage"],
                Photo = httpRequest.Files["RequestPhoto"],

            };                                               
        }



var formData = new FormData();            
formData.append("RequestMessage", requestMessage);
formData.append("RequestPhoto", imageFile);


$.ajax({
   type: "POST",
   url: "/UserRequest/CreateRequest",
   data: formData,      
   processData: false,
   success: function () {
    alert("OK");
   },
   error: function () {
    alert("Error");
 }
 });    

500错误意味着服务器错误,所以试着调试您的服务器代码这是一个旧线程,但我必须说-URL末尾的额外斜杠导致了500错误。500错误意味着服务器错误,所以试着调试您的服务器代码这是一个旧线程,但是我不得不说,URL结尾的额外斜杠导致了500错误。500错误意味着服务器错误,所以试着调试你的服务器代码这是一个旧线程,但我必须说,URL结尾的额外斜杠导致了500错误。500错误意味着服务器错误,所以试着调试你的服务器代码这是一个旧线程,但是我必须说,URL末尾的额外斜杠导致了500错误。两个脚本都使用tryied:它是空的。请尝试
contentType:“multipart/form data',
您使用的是false,只有在发送两个脚本都使用tryied的文件时才应该使用它:它是空的。请尝试
contentType:“multipart/form data”,
您使用的false应仅在发送包含两个脚本的文件时使用:它为空。请尝试使用
contentType:“多部分/表单数据”,
您使用的false应仅在发送包含两个脚本的文件时使用:它为空。请尝试使用
contentType:“多部分/表单数据”,
您使用的是false,只有在发送文件时才应使用该选项