C# 如何从HttpActionResult Ok方法(Web Api)获取对象?

C# 如何从HttpActionResult Ok方法(Web Api)获取对象?,c#,asp.net-web-api,C#,Asp.net Web Api,我正在学习一些Web Api基础知识,我想通过Ok(object)返回并传递一个对象。大概是这样的: [HttpGet] public IHttpActionResult Get() { var someString = ""; return Ok(someString); } [TestMethod] public void TestGet() { IHttpActionResult result = controller.Get(); Assert.AreE

我正在学习一些Web Api基础知识,我想通过
Ok(object)
返回并传递一个对象。大概是这样的:

[HttpGet]
public IHttpActionResult Get()
{
    var someString = "";
    return Ok(someString);
}
[TestMethod]
public void TestGet()
{
    IHttpActionResult result = controller.Get();
    Assert.AreEqual("", result.??);
}
现在我想测试这个方法,并断言这个Get()方法返回的字符串是否与预期的相同。我猜会是这样的:

[HttpGet]
public IHttpActionResult Get()
{
    var someString = "";
    return Ok(someString);
}
[TestMethod]
public void TestGet()
{
    IHttpActionResult result = controller.Get();
    Assert.AreEqual("", result.??);
}

我看到了这个问题,但最好的答案是解释如何验证
HttpStatusCode
,而不是验证传递的对象。

您可以通过将结果强制转换到
OkNegotiatedContentResult
并访问其
内容
属性来访问返回的字符串

[TestMethod]
public void TestGet()
{
    IHttpActionResult actionResult = controller.Get();
    var contentResult = actionResult as OkNegotiatedContentResult<string>;
    Assert.AreEqual("", contentResult.Content);
}
[TestMethod]
公共void TestGet()
{
IHttpActionResult actionResult=controller.Get();
var contentResult=作为OkNegotiatedContentResult的actionResult;
Assert.AreEqual(“,contentResult.Content);
}

示例代码来自:

与其测试结果是否完全等于某个值,不如测试结果中的什么内容?@JonSkeet您是对的。与其尝试测试传递的对象是否有效,我将只插入一些后置条件,并根据它们返回不同的
HttpActionResults
。非常感谢。实际上,有些情况下测试返回的结果是有意义的。@KhanhTO举个例子。例如:当您测试工厂方法时,您需要测试返回的对象是否为预期类型。测试返回的结果有意义的情况不胜枚举,这只是一个例子。@CodeCaster:updated。但有时我认为代码很简单,而且是不言自明的。