我今天在WebAPI2中构建了一个方法。并提出问题,如果我应该使我的方法无效或保持它作为IHttpActionResult?
有利于我看到IHttpActionResult可以返回任何响应代码。虚空方法的优点是什么?是它更快还是唯一的区别是它总是响应200(或者它是204?)。
有人知道哪一个更快吗?或者如果它与我命名的那些有任何其他重大差异? (这包括虚空无法回应任何事情的事实,IHttpActionResult可以.......)
答案 0 :(得分:5)
@Felipe Oriani,你真的很好..我很好奇,所以我做了测试。 看到这个惊人的输出。
这是相差0.424毫秒
这是使用以下webAPI代码
[Route("test/void")]
public void GetFirst()
{
StringBuilder stringbuilder = new StringBuilder();
for (int i = 0; i < 20; i++)
{
stringbuilder.Append("something");
}
//Thread.Sleep(1000);
}
[Route("test/IHttpActionResult")]
public IHttpActionResult GetSecond()
{
StringBuilder stringbuilder = new StringBuilder();
for (int i = 0; i < 20; i++)
{
stringbuilder.Append("something");
}
//Thread.Sleep(1000);
return Ok();
}
此外,我尝试在每个请求上给webAPI更多的工作..看看差异是否保持不变,或者如果对于更长的动作,使用IHttpActionResult而不是void是一个真正的改进?
我将迭代设置为200000并在WebAPI代码中取消注释Thread.Sleep(1000)
现在结果:
这是相差0.53毫秒
我可以得出结论并确认,你说的是真的。 IHttpActionREsult确实比虚空更快。只有不同之处才是真正注意到某些东西。但是,如果您正在寻找次要的迷你优化?这是其中之一!
下面的图片显示结果!
答案 1 :(得分:1)
来自asp.net web api应用程序的每条消息都会返回一个http状态代码。 exception
代价很高,因此,如果您将其传递给网络API,则框架应该知道如何引导此问题并更改为http message
结果。
没有极端的区别。如果代码抛出void
,web api中的200 - OK
操作方法将返回与exception
不同的内容。实际上我认为它比结果类型的方法更昂贵,因为asp。 net框架需要获取异常并将其更改为http message
,如前所述。
如果您在操作方法中指定http message
,则可以知道您对客户端的确切响应(我的意思是http status code
至少)。我喜欢使用HttpResponseMessage
并使用特定的http status code
创建回复。