我正在寻找使用WebAPI来创建Restful API。我想创建一个启动URL来为API的其他部分/实体提供URL。显而易见的地方是〜/ api /但是我似乎无法连接一条不会给出403结果的路线。有什么想法吗?
编辑:只是为了更清楚一点。我知道默认路由如何在WebAPI,I.E。中工作。如果我创建一个继承自ApiController的CustomersController,我可以使用〜/ api / customers到达那里。我想要的是前一步,我可以去〜/ api /并得到一个结果有点像:[
{ Title: 'Customers', Url: '~/api/customers' }
]
我想要这个,因为我的理解是RESTful服务是元数据(认为这个术语)驱动的(基本上是可发现的,并提供了结果中其他资源的链接)。因此,应该有一个指向API中所有其他资源的源URL。
答案 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