我正在尝试做类似于本网站上的建议 https://mathieu.fenniak.net/stop-designing-fragile-web-apis/
它表明这是一个更好的网址
http://api.fbi.gov/wanted/most
我的问题是如何在ASP.NET WEBAPI中执行类似的操作。例如,如果我想返回一个特定的查询,用一个表连接一些数据,而不是传入一个参数,我只想要一个方法url调用,只需要我想要的一个查询。完成此任务的最简单方法是什么?
示例网址调用:
API /控制器/ joinresultwithtable2
答案 0 :(得分:2)
最简单的方法可能是属性路由。 您可以在此处找到更多信息:http://attributerouting.net/
它允许您直接在操作方法上声明任何路径(带参数)。这样,您可以非常轻松地控制资源的可用性。
如果您想要对API进行版本控制,也很容易,因为您只需在属性中包含该版本
答案 1 :(得分:2)
如果您使用的是ASP.NET Web API 2,则可以执行以下操作:
[Route("customers/{customerId}/orders")]
public IEnumerable<Order> GetOrdersByCustomer(int customerId) { ... }
来源:http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2
答案 2 :(得分:2)
它不是很漂亮,但您可以设置路由,以便特定路径映射到特定的控制器和操作。
config.Routes.MapHttpRoute("query1", "query/query1", new {controller="StockQueries", action="query1"});
config.Routes.MapHttpRoute("query2", "query/query2", new { controller = "StockQueries", action = "query2" });
config.Routes.MapHttpRoute("query3", "query/query3", new { controller = "StockQueries", action = "query3" });
然后有一个看起来像这样的控制器,
public class StockQueriesController : ApiController
{
[ActionName("query1")]
public HttpResponseMessage GetQuery1()
{
return new HttpResponseMessage() {Content = new StringContent("Query1")};
}
[ActionName("query2")]
public HttpResponseMessage GetQuery2()
{
return new HttpResponseMessage() { Content = new StringContent("Query1") };
}
[ActionName("query3")]
public HttpResponseMessage GetQuery3()
{
return new HttpResponseMessage() { Content = new StringContent("Query1") };
}
[ActionName("query4")]
public HttpResponseMessage GetQuery4()
{
return new HttpResponseMessage() { Content = new StringContent("Query1") };
}
}
答案 3 :(得分:0)
您还可以使用以下方法:
[ActionName("DefaultApi")]
[Route("Api/UserLogin/DefaultApi/UserDetails")]
public IHttpActionResult UserDetails(){
return Ok(db.UserLogins.ToList());
}