我已经在网上搜索过这个我只是想确定我是否做错了。
我正在尝试为博客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?
非常感谢任何帮助。