rwk*_*iii 3 asp.net-mvc entity-framework asp.net-web-api
我见过的大多数Web API示例都以这种格式显示URI:
/api/values/ (returns all records)
/api/value/{id} (returns a specific record)
Run Code Online (Sandbox Code Playgroud)
我可以想到我不喜欢这种URI约定,但对于我目前的项目来说,它是完美的.虽然,它不适合我,我不知道我能做些什么来实现这一点.对我来说,我可以有一个或另一个 - 单数或复数.
如果我的控制器类名为ValuesController,那么我的Web API就是
/api/values/
/api/values/{id}
Run Code Online (Sandbox Code Playgroud)
如果我的控制器类名为ValueController,那么我的Web API就是
/api/value/
/api/value/{id}
Run Code Online (Sandbox Code Playgroud)
我使用ADO.NET实体数据模型在模型设计器中创建了几个实体.所有都有一个单一的命名约定.例如,活动,州,国家,用户等.尽管如此,EF似乎创建了多个数据库表.
我为每个实体创建了APIControllers.我已经尝试了2个控制器的命名约定 - 复数和单数,但我没有看到URI的预期(和期望)结果.无论我尝试什么,复数和单一的Web API总是相同的.
仅供参考,我刚检查了自动创建的默认API(ValuesController).要返回所有记录,我必须指定/ api/values /并返回单个记录,我必须指定/ api/values/{id} - 两者都是复数,我确定默认情况下不是这样.
这有什么影响?配置/识别复数和单数的URI的区分形式的逻辑在哪里?
在Web API RouteConfig.cs
文件中配置的默认路由指定了一个名为的参数controller
,类似于:
routes.MapHttpRoute("Default", "api/{controller}/{id}",
new { id = RouteParameter.Optional };
Run Code Online (Sandbox Code Playgroud)
当你打电话给任何一个/api/values
或/api/values/{id}
,你的控制器的路线值将values
在两种情况下.因此,Web API按照惯例解析的控制器将是ValuesController
.
(请注意,没有执行任何自动复数.IHttpControllerSelector
如果您真的想要实现该行为,您可以实现自定义.但我强烈建议您不要这样做.)