10

モデル:

public class UploadFileModel
{
    public int Id { get; set; }
    public string FileName { get; set; }
    public HttpPostedFileBase File { get; set; }
}

コントローラ:

public void Post(UploadFileModel model)
{
     // never arrives...
}

エラーが発生します

「メディアタイプが「multipart/form-data」のコンテンツからタイプ「UploadFileModel」のオブジェクトを読み取るために使用できるMediaTypeFormatterはありません。」

とにかくこれの周りにありますか?

4

1 に答える 1

9

それは簡単には不可能です。Web APIのモデルバインディングはMVCの場合とは根本的に異なり、ファイルのストリームをモデルに読み込み、さらにプリミティブをバインドするMediaTypeFormatterを作成する必要がありますが、これは非常に困難な場合があります。

最も簡単な解決策は、そのプロバイダーからの名前と値の収集MultipartStreamProviderを使用して、あるタイプのパラメーターと他のパラメーターを使用して、要求からファイルストリームを取得することです。FormData

-http ://www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-2 :

public async Task<HttpResponseMessage> PostFormData()
{
    if (!Request.Content.IsMimeMultipartContent())
    {
        throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
    }

    string root = HttpContext.Current.Server.MapPath("~/App_Data");
    var provider = new MultipartFormDataStreamProvider(root);

    try
    {
        await Request.Content.ReadAsMultipartAsync(provider);

        // Show all the key-value pairs.
        foreach (var key in provider.FormData.AllKeys)
        {
            foreach (var val in provider.FormData.GetValues(key))
            {
                Trace.WriteLine(string.Format("{0}: {1}", key, val));
            }
        }

        return Request.CreateResponse(HttpStatusCode.OK);
    }
    catch (System.Exception e)
    {
        return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
    }
}
于 2012-10-15T20:05:25.080 に答える