2016-04-30 60 views
1

我正在开发一个Asp Core项目,并试图将Ajax文件发布到blob Javascript对象以将操作上传到Amazon S3。我尝试了几种不同的方式,并没有能够得到这个工作。它似乎是一个模型绑定问题。 当我仅仅通过字符串参数发送图片url到动作时,这个功能起作用,但我也需要文件名。Asp Core Ajax Post with ViewModel

问题:在动作模型对象为空

Ajax代码:

function pickit() { 
      //Start the filepicker 
      filepicker.pick(
       { 
        //cropRatio: 4/3, 
        ////cropMin: [200, 100], 
        //cropForce: true, 
        mimetype: 'image/*', 
        //services: ['CONVERT', 'COMPUTER', 'FACEBOOK', 'FLICKR', 'DROPBOX', 'INSTAGRAM', 'BOX', 'EVERNOTE', 'GMAIL', 'PICASA', 'IMAGE_SEARCH', 'FTP', 'GOOGLE_DRIVE', 'SKYDRIVE', 'URL', 'WEBCAM', 'CLOUDDRIVE', 'IMGUR', 'CLOUDAPP'], 
        conversions: ['crop', 'rotate', 'filter', 'scale'] 
       }, 
       function (Blob) { 
        $("#imagespinner").removeClass("invisible") 
        $.ajax({ 
         type: "POST", 
         url: '@Url.Action("CreateImage","Photos")', 
         contentType: 'application/json', 
         dataType: "json", 
         data: JSON.stringify(Blob), 
         success: function (data, textStatus, jqXHR) { 
          $("#ImageURL").val(data); 
          var img = document.getElementById("imgImageURL"); 
          img.src = data; 
          $("#imagespinner").addClass("invisible") 
         }, 
         error: function (jqXHR, textStatus, error) { 
          alertify.alert(jqXHR.responseText); 
          $("#imagespinner").addClass("invisible") 
         } 
        }); 


        setTimeout(function() { $('#image-loading-message').fadeOut() }, 500); 

       }, 
       function (FPError) { 

       }, 
       function (FPProgress) { 

       } 

      ); 
     }; 

控制器动作:

[HttpPost] 
     public async Task<JsonResult> CreateImage(FilePickerViewModel model) 
     { 
      if (!String.IsNullOrWhiteSpace(model.url)) 
      { 
       //Code to Upload to S3 
return Json("ImageURL"); 
      else 
      { 
       Response.StatusCode = 400; 
       return Json("Url is needed"); 
      } 
     } 

视图模型:

public class FilePickerViewModel 
{ 
    public Int32 id { get; set; } 
    public String url { get; set; } 
    public String filename { get; set; } 
    public Int32 size { get; set; } 
    public String client { get; set; } 
    public String mimetype { get; set; } 
    public Boolean isWriteable { get; set; } 
} 

感谢您的帮助

+0

什么是Blob?在将其串联后,它看起来像什么? – Jasen

+0

Blob是filepicker为上传的图像返回的javascript对象。字符串化看起来像{client:“computer”,filename:“foobar.jpg”,id:1,isWriteable:true,mimetype:“image/jpeg”,size:12345,url:“https://foobar.com/富“} –

回答

1

我想出了问题,控制器操作需要声明[FromBody],因为这是来自ajax后