2016-04-29 14 views
0

ここでは少し問題があります。WCF RESTサービスにパラメータを追加してファイルを送信

現在、私はGeneric Handlerを使用してファイルをサーバーにアップロードしていますが、ユーザーの名前と姓のような余分なデータがある場合は、別にそのデータを保存する必要があります。

名前と姓を保存してファイルのアップロードに失敗すると、データベースにファイルが関連付けられていないため、問題が発生します。

私は新しいWebメソッドを実装することを考えています。これはこれをすべて受け取り、失敗した場合はSQLトランザクションをロールバックします。

私がやりたいことは、Webメソッドを呼び出して、そのユーザーの名前と姓と写真のファイルを渡してからそこのデータベースで保存を実行することです。

これは私がしようとしたものです:

のjQueryを:

$("#btnCreateRequest").click(function() { 
    var data = new FormData(); 
    var photo = $("#fuPhoto")[0].files[0]; 

    data.append("name", 'Fred'); 
    data.append("surname", 'Moller'); 
    data.append("photo", photo); 

    $.ajax({ 
     type: "POST", 
     url: "Service.svc/CreateRequest", 
     dataType: "json", 
     //cache: false, 
     contentType: false, 
     processData: false, 
     data: data, 
     success: function (response2) { 
      //$("#PageArea").html(response2); 
      Popup(true, "success", "success", true); 
     }, 
     error: function (response) { 
      Popup(true, "Error", JSON.stringify(response), true); 
     } 
    }); 
}); 

IService.cs

[OperationContract] 
[WebInvoke(Method = "POST", 
    UriTemplate = "CreateRequest", 
    RequestFormat = WebMessageFormat.Json, 
    ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.WrappedRequest)] 
string CreateRequest(); 

Service.svc

public string CreateRequest() 
{ 
    var request = System.Web.HttpContext.Current.Request; 

    string name = request["name"]; 
    string surname = request["surname"]; 
    HttpPostedFile photo = request["photo"]; 

    //Saving in database happens here, using above variables... 

    return "whatever"; 
} 

しかし、私は無残に失敗しています。

Webサービスが呼び出されますが、すべての変数はNULLです。

私が間違ったやり方をしている場合は、正しい方向に向けるようにしてください - どんな助けもありがとう!

(何かが明確でない場合は、尋ねると、私はより多くを説明してみましょうください)

+0

'BodyStyle'を' Bare'に設定してみてください。 –

+0

ちょうどそれを試みた - それでも変数値を取得していない:( –

答えて

0

ああ、どんなに、私は私のアプローチを変更しました。 Webサービスを使用する代わりに、汎用ハンドラを使用します。

場合によっては、それを少し違ったものにする方がいいでしょう。 これは私が私のために働く方法です。私はjQueryで

、私はこのようなものがあります。その後、私のUploadHandler.ashx(ジェネリックハンドラ)に

$("#btnCreateRequest").click(function() { 
     var data = new FormData(); 
     var photo = $("#fuPhoto")[0].files[0]; 

     data.append("callingFromPage", "help"); 
     data.append("requestType", $('#dropBugType').val()); 
     data.append("description", $('#taDescription').val()); 
     data.append("photo", photo); 
     data.append("userGUID", _cookieObject.UserObject.GlobalUniqueID); 

     $.ajax({ 
      xhr: function() { 
       var xhr = new window.XMLHttpRequest(); 
       xhr.upload.addEventListener("progress", function (evt) { 
        if (evt.lengthComputable) { 
         var percentComplete = evt.loaded/evt.total; 
         percentComplete = parseInt(percentComplete * 100); 
         //Indicate progress. 
         $('.uplPhotoProgress').css('width', percentComplete + '%'); 
         $('.uplPhotoProgress').html('Uploading: ' + percentComplete + '%'); 
         //Hide progress bar. 
         if (percentComplete === 100) { 
          $//('.uplProgressAttachments').css('display', percentComplete + 'none'); 
         } 

        } 
       }, false); 
       return xhr; 
      }, 
      url: "UploadHandler.ashx/", 
      data: data, 
      processData: false, 
      contentType: false, 
      type: "POST", 
      success: function (response) { 
       if (response === 'success') { 
        console.log('success'); 
       } else { 
        console.log('problem...'); 
       } 
      }, 
      error: function (response) { 

      } 
     }); 
    }); 

を:

public void ProcessRequest(HttpContext context) 
    { 
     context.Response.ContentType = "multipart/form-data"; 
     context.Response.Expires = -1; 
     try 
     { 
      string callingFromPage = context.Request["callingFromPage"]; 
      if (!string.IsNullOrWhiteSpace(callingFromPage)) 
      { 
       switch (callingFromPage) 
       { 
        case "help": 
         { 
          string requestType = context.Request["requestType"]; 
          string description = context.Request["description"]; 
          HttpPostedFile photo = context.Request.Files[0]; 
          string guid = context.Request["userGUID"]; 
          //DO YOUR STUFF >>> 
          context.Response.Write("success"); 
          break; 
         } 
      } 
     } 
     catch (Exception ex) 
     { 
      context.Response.Write("Error: " + ex.Message); 
     } 
    } 

確かに、これは何の簡単な例であります私はしました...しかし、私はこのようにしてうれしいです。

関連する問題