署名パッドをイントラネット (MVC4) アプリケーションに統合して、人々がシステム生成ドキュメントに電子署名を適用できるようにする必要があります。残念ながら、私が受け取った署名パッドには COM/ActiveX API しかないので、ユーザーが署名をキャプチャしてサーバーにアップロードできるようにする短い Windows フォーム アプリケーションを作成しました。アップロード時に、Windows フォーム リクエストによって送信された指定されたドキュメント エンティティに署名画像を関連付ける MVC4 アクションが必要です。だから、私はこのモデルを持っているとしましょう:
public class DocumentToSign {
public int DocumentId { get; set; }
public int DocumentTypeId { get; set; }
}
次に、アップロードされた画像を受け取るために次のアクションを実行します。
[HttpPost]
public ActionResult UploadSignature(DocumentToSign doc, HttpPostedFileBase signature)
{
//do stuff and catch errors to report back to winforms app
return Json(new {Success = true, Error = string.Empty});
}
次に、画像をアップロードするコード:
var doc = new DocumentToSign{ DocumentId = _theId, DocumentTypeId = _theType };
var fileName = SaveTheSignature();
var url = GetTheUrl();
using(var request = new WebClient())
{
request.Headers.Add("enctype", "multipart/form-data");
foreach(var prop in doc.GetType().GetProperties())
{
request.QueryString.Add(prop.Name, Convert.ToString(prop.GetValue(doc, null)));
}
var responseBytes = request.UploadFile(url, fileName);
//deserialize resulting Json, etc.
}
モデル バインダーはDocumentToSign
問題なくクラスを取得しているように見えますが、HttpPostedFileBase
は常に null です。アップロードされた画像がアクションのパラメーターであることをモデルバインダーに何らかの方法で伝える必要があることはわかっていsignature
ますが、その方法がわかりません。で使用UploadValues
してみましたNameValueCollection
がNameValueCollection
、値を にすることしかできないstring
ため、画像を ( としてもbyte[]
) その一部にすることはできません。
実際の MVC4 アプリケーションの外部から、ファイルとモデルを同じアクションにアップロードすることは可能ですか? 以外のものを使用する必要がありHttpPostedFileBase
ますか?以外のWebClient
?私は途方に暮れています。