在ASP.NET Web API 2,以下两者之间的区别是什么?

public async Task<IEnumerable<MyItem>> GetMyItems()
{
    //... code ..., var myItems = await ...
    return myItems;
}

public async Task<IQueryable<MyItem>> GetMyItems()
{
    //... code ..., var myItems = await ...
    return myItems;
}

public async Task<IHttpActionResult> GetMyItems()
{
    //... code ..., var myItems = await ...
    return Ok(myItems);
}

我应该返回IHttpActionResult还是IEnumerable<MyItem>/IQueryable<MyItem>

推荐答案

您应该返回IHttpActionResult,因为您可以更具体地针对客户.您可以创建更加用户友好的web应用程序.基本上,您可以针对不同的情况返回不同的HTML状态消息.

例如:

public async Task<IHttpActionResult> GetMyItems()
{
    if(!authorized)
        return Unauthorized();
    if(myItems.Count == 0)
        return NotFound();
    //... code ..., var myItems = await ...
    return Ok(myItems);
}

IEnumerableIQueryable只会将数据解析为输出格式,您将无法正确处理异常.这是最重要的区别.

Asp.net相关问答推荐

如何使用 Get-Process powershell 命令通过端口号获取进程的 ID

如何将标头中的用户名/密码传递给 SOAP WCF 服务

在 lambda 表达式中否定 Func

无法连接到 ASP.Net 开发服务器问题

/应用程序中的服务器错误. ASP.NET

威胁已经被清除了

如何判断 IIS 是处于 32 位还是 64 位模式

在视图 Mvc.net 中访问路由值

无法让嵌套在 UpdatePanel 中的 WebControl 中的 ScriptManager.RegisterStartupScript 工作

Response.Redirect 使用 ~ 路径

无法从 App_code 文件夹中找到类型或命名空间

HttpWebRequest 未通过凭据

什么相当于 ASP.NET 中的 cron 作业(job)?

在 asp.net 中调整图像大小而不会丢失图像质量

ASP .NET Button 事件处理程序不会在第一次单击时触发,而是在 PostBack 后的第二次单击时触发

如何在 ASP.NET MVC 中启用跨源请求

ServiceStack 示例应该以什么顺序被理解?

连接字符串正确时出现实例失败错误

Page.IsPostBack 和 Page.IsCallBack 有什么区别?

如何在不遍历每个循环的情况下从字典对象中获取所有键(仅键)