我过去2周一直使用WebAPI 2.0和ODATA 2.0。我想知道何时使用ODATA路由和WebAPI属性路由。
谢谢,
帕文
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);
在您的" userodatacontroller.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:存储库类
您可以按照网址访问ODATA Web API:
"http://localhost:8080/odata/TestOdata"