其實我的問題很簡短。如何從ASP.NET Web API(POST或PUT)調用獲取httppostedfile?
如何從ASP.NET Web API POST或PUT獲取HttpPostedFile?
我確實看到我可以從Request.Header,Request.Content,Request.Properties等Request中獲取各種信息。在哪裏可以找到我傳遞的文件,以及如何從中創建HttpPostedFile?
在此先感謝!
其實我的問題很簡短。如何從ASP.NET Web API(POST或PUT)調用獲取httppostedfile?
如何從ASP.NET Web API POST或PUT獲取HttpPostedFile?
我確實看到我可以從Request.Header,Request.Content,Request.Properties等Request中獲取各種信息。在哪裏可以找到我傳遞的文件,以及如何從中創建HttpPostedFile?
在此先感謝!
你的簡短問題沒有一個簡短的答案恐怕。
ASP.NET Web API公開了HTTP的奇蹟,而ASP.NET MVC抽象了它的一部分 - 在本例中爲HttpPostedFile。
所以有點背景的:其中一個文件涉及通常有multipart表單數據內容
HTTP職位。這意味着您正在混合不同類型的內容類型:您的常規表單數據將使用formurlencoded發送,而文件將發送給application/octent-stream。
所以在網頁API,所有你需要做的就是
var contents = message.Content.ReadAsMultipartAsync(); // message is HttpRequestMessage
其中的內容將包含您的文件。
退房的great article從亨裏克尼爾森發佈多的內容(即在張貼文件形式)
UPDATE:添加簡單的代碼用於控制器接收文件,而無需多內容
如果你只需要你的控制器接收文件(即沒有多部分內容),你可以做類似上面的事情。該請求只包含文件二進制文件,文件名在URL中傳遞。
public Task<HttpResponseMessage> Post([FromUri]string filename)
{
Guid uploadedFile = Guid.NewGuid();
Task<HttpResponseMessage> task = Request.Content.ReadAsStreamAsync().ContinueWith<HttpResponseMessage>(t =>
{
if (t.IsFaulted || t.IsCanceled)
throw new HttpResponseException(HttpStatusCode.InternalServerError);
try
{
using (Stream stream = t.Result)
{
//TODO: Write the stream to file system/db as you need
}
}
catch (Exception e)
{
Object o = e;
return Request.CreateResponse(HttpStatusCode.InternalServerError, e.GetBaseException().Message);
}
return Request.CreateResponse(HttpStatusCode.Created, uploadedFile.ToString());
});
return task;
}
請做! :) Thnx! – StijnSpijker
@StijnSpijker - 完成。回答更新了示例代碼。 –