Web API默认URL

时间:2013-09-23 14:23:33

标签: rest asp.net-web-api

我正在寻找使用WebAPI来创建Restful API。我想创建一个启动URL来为API的其他部分/实体提供URL。显而易见的地方是〜/ api /但是我似乎无法连接一条不会给出403结果的路线。有什么想法吗?

编辑:只是为了更清楚一点。我知道默认路由如何在WebAPI,I.E。中工作。如果我创建一个继承自ApiController的CustomersController,我可以使用〜/ api / customers到达那里。我想要的是前一步,我可以去〜/ api /并得到一个结果有点像:

[
   { Title: 'Customers', Url: '~/api/customers' }
]

我想要这个,因为我的理解是RESTful服务是元数据(认为这个术语)驱动的(基本上是可发现的,并提供了结果中其他资源的链接)。因此,应该有一个指向API中所有其他资源的源URL。

2 个答案:

答案 0 :(得分:0)

您需要做的就是添加一条专门处理~/api的新路线。

在您的项目中,您会注意到Application_Start中的Global.asax方法已调用WebApiConfig.Register(GlobalConfiguration.Configuration)WebApiConfig类已包含在您的项目中{ {1}}文件夹(以及其他各种配置类)。如果您查看App_Start电话的实施情况,您会看到实际设置Register路线的地方,即

~/api/controller

为了使config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); 可被发现,您需要做的就是在默认值之前引入一条新路径来处理对~/api的任何调用,例如

~/api

然后添加config.Routes.MapHttpRoute( name: "DiscoverableApi", routeTemplate: "api", defaults: new { controller = "Discoverable", } ); 来处理该呼叫,例如

ApiController

如果您不想对网址进行硬编码,那么您很可能需要查看类似于反射的内容,以便枚举所有可用的public class DiscoverableController : ApiController { // GET api/values public IEnumerable<string> Get() { return new string[] { "/users", "/photos", "/history" }; } } 及其可访问的端点(即操作)。

答案 1 :(得分:0)

查看NuGet的Microsoft ASP.NET Web API Help Page包。开箱即用,您可以创建所有API端点的列表,这些端点将作为MVC视图返回。但是,您可以自定义它以返回Json。您也可以将其配置为挂起您想要的任何路线,即

api.mysite.com/help
myapi.com/api
etc