krv*_*rvl 3 c# api asp.net-mvc asp.net-web-api
我研究了如何在MVC项目中使用API,但我对此有些怀疑.(在任何人问之前,我用C#语言写作).
到目前为止,我知道Api的路由配置是在WebApiConfig类中设置的,默认路由是:
routeTemplate: "api/{controller}/{id}"
Run Code Online (Sandbox Code Playgroud)
通过这样做,当我编译一个jSon请求时,我知道我必须调用哪个URI才能获得特定的结果.
但我想更具体一点,所以我修改了Api的路线:
routeTemplate: "api/{controller}/{action}/{id}"
Run Code Online (Sandbox Code Playgroud)
通过这条路线,我将能够直接为我的ApiController中的特定动作(方法?)构建一个URI.
我还了解到,/{controller}/使用jSon构建URI时,是类的名称.也就是说,如果类是ProductsController我必须用来构建URI的控制器名称/products.(所以整个网址都是/api/products).
这里的问题是:
如果我有一个名为just的ApiController类Products,它是否可以识别为URI的一部分?或者ApiController类必须以"Controller"结尾?
按照教程我把我的ApiController和其他控制器放在同一个文件夹中.我知道可以将Apis放入不同的文件夹中.那么,MVC会自动识别每一个API吗?我的意思是,无论我在哪里保存它们,它们都被认为是API吗?
如果是这样,我最终可以调用位于与我正在处理的项目不同的项目中的API吗?
我可以使用一组API创建单个项目(作为类库)吗?
如果我想在不同的项目中调用API,路由配置是否会更改?
哦,那是很多问题...... :)
回答他们:
如果我有一个名为Products的ApiController类,它是否可以识别为URI的一部分?或者ApiController类必须以"Controller"结尾?
ASP.NET Routing使用了Coonvention,因此,据我所知,如果你按照自己的喜好命名这个类,不遵循那个约定,它们就不会被识别,你最有可能得到404.所以要回答你的问题,是的,名称必须结束Controller,除非你覆盖默认约定(参见Mike Goodwin的回答).
通过遵循教程我将我的ApiController放在与其他控制器相同的文件夹中.我知道可以将Apis放入不同的文件夹中.那么,MVC会自动识别每一个API吗?我的意思是,无论我在哪里保存它们,它们都被认为是API吗?
该文件夹无关紧要,ASP.NET将查找与该名称匹配的类.因为它们从基座继承该API控制器被识别为API控制器ApiController而不是控制器一个
如果是这样,我最终可以调用位于与我正在处理的项目不同的项目中的API吗?我可以使用一组API创建单个项目(作为类库)吗?如果我想在不同的项目中调用API,路由配置是否会更改?
这不清楚......你是什么意思"召唤"一个API?如果API在另一个项目中,它可能会坐在一个单独的地址上......你只需要将你的JSON请求指向该地址,所以如果你使用的是jQuery,请执行以下操作:
$.getJSON('http://other.server/api/Controller', function(data) { ... });
Run Code Online (Sandbox Code Playgroud)
而不是简单地说:
$.getJSON('/api/Controller', function(data) { ... });
Run Code Online (Sandbox Code Playgroud)
(只要注意跨站点脚本问题).
希望能为你解决问题.随意询问某些东西是否有意义......
| 归档时间: |
|
| 查看次数: |
10909 次 |
| 最近记录: |