gpt4 book ai didi

c# - 如何将 HttpRequest 接收到 MVC 3 Controller 操作中?

转载 作者:行者123 更新时间:2023-11-30 15:39:09 24 4
gpt4 key购买 nike

当前解决方案

所以我有一些非常相似的东西

[HttpPost]
public ActionResult Upload()
{
var length = Request.ContentLength;
var bytes = new byte[length];

if (Request.Files != null )
{
if (Request.Files.Count > 0)
{
var successJson1 = new {success = true};
return Json(successJson1, "text/html");
}
}
...
return Json(successJson2,"text/html");
}

单元可测试解决方案?

我想要这样的东西:

[HttpPost]
public ActionResult Upload(HttpRequestBase request)
{
var length = request.ContentLength;
var bytes = new byte[length];

if (request.Files != null )
{
if (request.Files.Count > 0)
{
var successJson1 = new {success = true};
return Json(successJson1);
}
}

return Json(failJson1);
}

但是这失败了,这很烦人,因为我可以从基类创建一个 Mock 并使用它。

注意事项

  • 我知道这不是解析表单/上传的好方法,并且会想说这里发生了其他事情(即这个上传可以是表单或 xmlhttprequest - 操作不知道是哪个)。
  • 使“请求”单元可测试的其他方法也很棒。

最佳答案

您已经有一个 Request Controller 上的属性 => 您不需要将其作为操作参数传递。

[HttpPost]
public ActionResult Upload()
{
var length = Request.ContentLength;
var bytes = new byte[length];

if (Request.Files != null)
{
if (Request.Files.Count > 0)
{
var successJson1 = new { success = true };
return Json(successJson1);
}
}

return Json(failJson1);
}

现在您可以在单元测试中模拟 Request,更具体地说,模拟具有 Request 属性的 HttpContext:

// arrange
var sut = new SomeController();
HttpContextBase httpContextMock = ... mock the HttpContext and more specifically the Request property which is used in the controller action
ControllerContext controllerContext = new ControllerContext(httpContextMock, new RouteData(), sut);
sut.ControllerContext = controllerContext;

// act
var actual = sut.Upload();

// assert
... assert that actual is JsonResult and that it contains the expected Data

关于c# - 如何将 HttpRequest 接收到 MVC 3 Controller 操作中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10737134/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com