将带有Array of String的复杂类型传递给WEB API

时间:2015-03-12 23:14:12

标签: json asp.net-mvc asp.net-web-api asp.net-web-api2 model-binding

我已经在网上搜索过这个我只是想确定我是否做错了。

我正在尝试为博客Web应用程序创建后端RESTful API服务。让我稍微解释一下这个结构。我有一个名为“FilesController”的控制器,它是一个API控制器客户端会发出PUT请求将文件上传到服务器,服务器将返回一个uploadinfo供客户端稍后使用,同时为博客创建一个创建请求与上传的图像。所以这个简单场景我需要的类是“UploadInfo”和“BlogAPIModel”;

UploadInfo

public class UploadInfo
{
    public string [] UploadedFileNames { get; set; }
}

BlogAPIModel

public class BlogAPIModel
{
    public string BlogTitle{ get; set; }

    UploadInfo UploadedData { get; set; }
}

以下是我的控制器代码:

FilesController:

public class FilesController : ApiController
{
    [HttpPut]
    public async Task<HttpResponseMessage> UploadTempFile()
    {
        // Check if the request contains multipart/form-data.
        if (!Request.Content.IsMimeMultipartContent())
        {
            throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
        }

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

        try
        {
            // Read the form data.
            await Request.Content.ReadAsMultipartAsync(provider);

            var uploadedFiles = new UploadInfo();

            var listOffileNames = new List<string>();

            foreach (MultipartFileData file in provider.FileData)
            {
                listOffileNames.Add(file.LocalFileName);
            }

            uploadedFiles.UploadedFileNames = listOffileNames.ToArray();


            return Request.CreateResponse(HttpStatusCode.OK, uploadedFiles);
        }
        catch (System.Exception e)
        {
            return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e);
        }
    }
}

BlogsController:

public class BlogsController : ApiController
{

    [HttpPost]
    public HttpResponseMessage CreateBlog(BlogAPIModel model) 
    {

        return Request.CreateResponse(HttpStatusCode.OK);
    }

}

我在调用“CreateBlog”方法时使用的Json请求示例如下;

{
 "BlogTitle" : "Sample Blog Title", 
 "UploadedData" : { "UploadedFileNames" : ["samplepath1", "samplepath2"]}
}

我已经尝试了所有我知道的但是当我调试请求时“BlogTitle”字段来自我从客户端发送的任何内容,但“UploadedData”始终为null,它没有被绑定。

我是否必须为此编写某种CustomModelBinder?

非常感谢任何帮助。

0 个答案:

没有答案