Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File upload 是否可以在asp.net webapi中使用上载的文件进行modelbinding?_File Upload_Asp.net Web Api_Model Binding - Fatal编程技术网

File upload 是否可以在asp.net webapi中使用上载的文件进行modelbinding?

File upload 是否可以在asp.net webapi中使用上载的文件进行modelbinding?,file-upload,asp.net-web-api,model-binding,File Upload,Asp.net Web Api,Model Binding,模型: 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... } 我犯了一个错误 “没有Medi

模型:

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...
}
我犯了一个错误

“没有MediaTypeFormatter可用于从媒体类型为“multipart/form data”的内容中读取“UploadFileModel”类型的对象。”

这有什么办法吗?

这不容易做到。WebAPI中的模型绑定与MVC中的模型绑定有着根本性的不同,您必须编写一个MediaTypeFormatter,将文件流读入您的模型中,并额外绑定原语,这可能非常具有挑战性

最简单的解决方案是使用某种类型的
MultipartStreamProvider
从请求中获取文件流,并使用
FormData
name-value收集从该提供程序获取其他参数

示例-:

public异步任务PostFormData()
{
如果(!Request.Content.IsMimeMultipartContent())
{
抛出新的HttpResponseException(HttpStatusCode.UnsupportedMediaType);
}
string root=HttpContext.Current.Server.MapPath(“~/App_Data”);
var provider=新的MultipartFormDataStreamProvider(根);
尝试
{
wait Request.Content.ReadAsMultipartAsync(提供程序);
//显示所有键值对。
foreach(provider.FormData.AllKeys中的var键)
{
foreach(provider.FormData.GetValues(键)中的var val)
{
Trace.WriteLine(string.Format(“{0}:{1}”,key,val));
}
}
返回Request.CreateResponse(HttpStatusCode.OK);
}
捕获(System.e例外)
{
返回请求.CreateErrorResponse(HttpStatusCode.InternalServerError,e);
}
}

您可以使用MediaTypeFormatter定义格式化程序来处理媒体类型数据。这里有一个很好的解释:可能是
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);
    }
}