1

我正在考虑使用 WebAPI 创建一个 Restful API。我想创建一个启动 url 来为 API 的其他部分/实体提供 URL。这样做的明显地方是 ~/api/ 但是我似乎无法连接一条不会给出 403 结果的路由。有任何想法吗?

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

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

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

4

2 回答 2

0

为此,您需要做的就是添加一个~/api专门处理的新路由。

在您的项目中,您会注意到在调用的Application_Start方法中,该类包含在您的项目中的文件夹中(以及其他各种配置类)。如果您查看调用的实现,您将看到实际设置路由的位置,即Global.asaxWebApiConfig.Register(GlobalConfiguration.Configuration)WebApiConfigApp_StartRegister~/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" };
    }
}

如果您不想对您的 URL 进行硬编码,您很可能需要查看诸如 Reflection 之类的东西来枚举所有可用ApiController的 's 及其可到达的端点(即操作)。

于 2013-09-23T14:29:36.300 回答
0

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

api.mysite.com/help
myapi.com/api
etc
于 2013-09-23T15:06:51.080 回答