Я использую следующий подход для загрузки файлов через контроллеры ASP.NET Web API.
[System.Web.Http.HttpPost]
public HttpResponseMessage UploadFile()
{
HttpResponseMessage response;
try
{
int id = 0;
int? qId = null;
if (int.TryParse(HttpContext.Current.Request.Form["id"], out id))
{
qId = id;
}
var file = HttpContext.Current.Request.Files[0];
int filePursuitId = bl.UploadFile(qId, file);
}
catch (Exception ex)
{
}
return response;
}
В моих модульных тестах я создал класс HTTPContext
вручную, прежде чем вызывать действие UploadFile
:
var request = new HttpRequest("", "http://localhost", "");
var context = new HttpContext(request, new HttpResponse(new StringWriter()));
HttpContext.Current = context;
response = controller.UploadFile();
К сожалению, мне не удалось добавить пользовательские значения в коллекцию Form
, поскольку она доступна только для чтения. Также я не мог изменить коллекцию Files
.
Можно ли добавить пользовательские значения в свойства Form
и Files
для Request
для добавления необходимых данных (id и содержимого файла) во время unit test?