我需要将签名板集成到 Intranet (MVC4) 应用程序中,允许人们将电子签名应用于系统生成的文档。不幸的是,我得到的签名板只有一个 COM/ActiveX API,所以我编写了一个简短的 Windows 窗体应用程序,它允许用户捕获签名并将其上传到服务器。上传时,我需要 MVC4 操作将签名图像与 Windows 窗体请求发送的指定文档实体相关联。所以,假设我有这个模型:
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
始终为空。我知道我需要以某种方式告诉模型绑定器上传的图像是signature
动作中的参数,但我不知道该怎么做。我尝试使用UploadValues
with a NameValueCollection
,但NameValueCollection
只允许值为 a string
,因此图像(即使作为 a byte[]
)不能成为其中的一部分。
是否可以从实际 MVC4 应用程序外部将文件和模型上传到相同的操作?我应该使用其他东西HttpPostedFileBase
吗?除了WebClient
? 我很茫然。