我正在研究MVC 5应用程序。因为我创建了一个名为Organization
的区域。我还在该区域的controllers文件夹中创建了一个(API)文件夹。所以我的结构变得像
/Areas/Organization/Controllers/API/OrganizationAPI
其中OrganizationAPI
是Organization
区域的API控制器。现在我的问题是关于MVC中的路由。我无法找到哪个URL会调用我的API。
我尝试使用此网址
http://localhost:80/Organization/API/OrganizationAPI/getData
其中getData
是我的操作方法。但它说没有找到资源。有什么可以帮助我理解我如何注册我自己的路线,以便我可以用URL映射我的行为,并建议我在MVC 4或更高版本中的URL路由的一些参考URL。
答案 0 :(得分:8)
如果您的项目已包含WebApiConfig.cs文件,那太好了!您只需添加如下路线:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// NEW ROUTE FOR YOUR AREA
config.Routes.MapHttpRoute(
name: "API Area Default",
routeTemplate: "api/AREA/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
答案 1 :(得分:1)
为API控制器创建的默认路由不考虑方法名称(在您的情况下为getData),而不是像常规控制器中那样。它取决于http方法(get / post / put / delete)和你发送的参数,action方法应该与http方法名称相同(例如getData,将在使用get方法时调用)。
您可以添加自定义路由以按名称调用api控制器上的操作。
因此,要调用get数据方法,网址应如下所示:区域/ API /控制器,请勿添加方法名称。
答案 2 :(得分:1)
您可以创建另一条路线来模拟区域,但这仅适用于“命名空间”概念:您将看到一个区域中的控制器可以从其他区域访问。这是因为“AREA”在Web API中并不像MVC路由那样真正计算在内。
因此,如果您的控制器在不同区域中具有相同名称,则会抛出异常:
找到了多个匹配名为“ticket”的控制器的类型。 如果为此请求提供服务的路由,则会发生这种情况 ('api / {controller} / {id}')发现了多个控制器 同名但不同的命名空间,不受支持。该 请求'门票'找到了以下匹配的控制器: .....
我的解决方案是遵循Martin Devillers Blog的优雅解决方法:
http://blogs.infosupport.com/asp-net-mvc-4-rc-getting-webapi-and-areas-to-play-nicely/
SoFarSoGood!