【发布时间】:2014-03-01 06:27:51
【问题描述】:
过去两周我一直在使用 Webapi 2.0 和 OData 2.0。我想知道什么时候使用OData路由和Webapi Attribute路由。
谢谢,
帕万
【问题讨论】:
标签: c# asp.net-web-api odata asp.net-web-api-routing
过去两周我一直在使用 Webapi 2.0 和 OData 2.0。我想知道什么时候使用OData路由和Webapi Attribute路由。
谢谢,
帕万
【问题讨论】:
标签: c# asp.net-web-api odata asp.net-web-api-routing
Web API 是用于创建 HTTP 端点(Web API/REST API)的通用框架。您还可以使用它来创建 OData 端点,这是一种更具体的 ASP.NET Web API 应用程序。
所以第一个问题是您是要创建 OData 端点还是其他类型的 REST API。
如果您要创建 OData 端点,请使用 OData 路由。否则使用“常规”Web API 路由
【讨论】:
Web API 路由
您可以使用默认路由,但如果您想定义您的路由模板,那么您可以使用使用基于约定的路由的 AtrributeRouting 在这种类型的路由中,您定义一个或多个路由模板,它们基本上是参数化的字符串。 当框架收到请求时,它会将 URI 与路由模板进行匹配
安装以下 nuget 包:
"Install-Package Microsoft.AspNet.WebApi.WebHost"
在“WebApiConfig.cs”文件中添加以下行
config.MapHttpAttributeRoutes();
像下面这样创建你的 webapicontroller
[Route("api/users")]
public HttpResponseMessage GetUsers(int userId)
{
你可以像这个 URL 一样访问你的 web api:
http://localhost:8080/api/users/
Web API Odata 路由
当你想使用 IQueryable 而不是 IEnumerable 时,你可以使用 odata
为 odata 安装 nuget 包
"Microsoft.AspNet.WebApi.OData"
在“WebApiConfig.cs”文件中添加以下代码
var modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<ViewTest>("TestOdata");
var model = modelBuilder.GetEdmModel();
config.Routes.MapODataRoute(routeName: "OData", routePrefix: "odata", model: model);
在“UsersOdataController.cs”文件中添加以下代码
public class TestOdataController : OdataController
{
//GET odata/TestOdata
public IQueryable<ViewTest> Get()
{
try
{
return context.View_TestRepository.GetQueryable();
}
catch (Exception ex)
{
throw ex;
}
}
}
ViewTest : 使用所需列查看模型类 View_TestRepository : 存储库类
您可以通过以下 URL 访问您的 odata Web api:
"http://localhost:8080/odata/TestOdata"
【讨论】: