次の方法を使用して、ASP.NET Web APIコントローラを介してファイルをアップロードしています。私のユニットテストでユニットテスト偽のHTTPContextを使用した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;
}
私はUploadFile
アクションを呼び出す前に、手動でHTTPContext
クラスを作成しました:それはだから
var request = new HttpRequest("", "http://localhost", "");
var context = new HttpContext(request, new HttpResponse(new StringWriter()));
HttpContext.Current = context;
response = controller.UploadFile();
は残念ながら、私は、Form
コレクションにカスタム値を追加することができませんでした読み取り専用です。また、Files
コレクションを変更できませんでした。
Request
のForm
とFiles
プロパティにカスタム値を追加して、ユニットテスト中に必要なデータ(IDとファイルの内容)を追加する方法はありますか?
ご返信いただきありがとうございます。 web.apiコントローラを使用しているので、ControllerContextではなくHttpControllerContextを使用する必要があります。 HttpControllerContextは、コンストラクタHttpContextBaseを渡すことを許可していません。 –
なぜ、これがなぜPylyp Lebedievが言ったときにupvotedされたのか疑問に思う... – rlee923