我开始使用MVC4 Web API项目,我有多个< code>HttpPost方法的控制器。控制器如下所示:
控制器
public class VTRoutingController : ApiController
{
[HttpPost]
public MyResult Route(MyRequestTemplate routingRequestTemplate)
{
return null;
}
[HttpPost]
public MyResult TSPRoute(MyRequestTemplate routingRequestTemplate)
{
return null;
}
}
这里My审视模板
代表负责处理通过请求的Json的模板类。
错误:
当我使用Fiddler请求http://localhost:52370/api/VTRouting/TSPRoute
或http://localhost:52370/api/VTRouting/Route
时,我得到一个错误:
找到与请求匹配的多个操作
如果我去掉上面的一个方法,效果会很好。
全球
我已尝试修改global中的默认路由表。asax</code>,但我仍然收到错误,我想我在global.asax中定义路由时遇到了问题。这是我在global.asax中做的事情。
public static void RegisterRoutes(RouteCollection routes)
{
routes.MapHttpRoute(
name: "MyTSPRoute",
routeTemplate: "api/VTRouting/TSPRoute",
defaults: new { }
);
routes.MapHttpRoute(
name: "MyRoute",
routeTemplate: "api/VTRouting/Route",
defaults: new { action="Route" }
);
}
我使用POST在Fiddler中发出请求,在RequestBody中为MyRequestTemplate传递json。
用途:
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
它不再是RESTful方法,但您现在可以按名称调用您的动作(而不是让Web API根据动词自动为您确定一个动作),如下所示:
[POST] /api/VTRouting/TSPRoute
[POST] /api/VTRouting/Route
与普遍的看法相反,这种方法没有任何问题,也没有滥用Web API。您仍然可以利用Web API的所有优秀特性(委托处理程序、内容协商、mediatypeformatters等等)——只是抛弃了RESTful方法。
问题的另一个解决方案是使用 Route
,它允许您通过注释在方法上指定路由:
[RoutePrefix("api/VTRouting")]
public class VTRoutingController : ApiController
{
[HttpPost]
[Route("Route")]
public MyResult Route(MyRequestTemplate routingRequestTemplate)
{
return null;
}
[HttpPost]
[Route("TSPRoute")]
public MyResult TSPRoute(MyRequestTemplate routingRequestTemplate)
{
return null;
}
}
在一个控制器中可以有多个动作。
为此,您必须做以下两件事。
>
首先使用ActionName
属性装饰操作,如
[ActionName("route")]
public class VTRoutingController : ApiController
{
[ActionName("route")]
public MyResult PostRoute(MyRequestTemplate routingRequestTemplate)
{
return null;
}
[ActionName("tspRoute")]
public MyResult PostTSPRoute(MyRequestTemplate routingRequestTemplate)
{
return null;
}
}
其次,在<code>WebApiConfig</code>文件中定义以下路由。
// Controller Only
// To handle routes like `/api/VTRouting`
config.Routes.MapHttpRoute(
name: "ControllerOnly",
routeTemplate: "api/{controller}"
);
// Controller with ID
// To handle routes like `/api/VTRouting/1`
config.Routes.MapHttpRoute(
name: "ControllerAndId",
routeTemplate: "api/{controller}/{id}",
defaults: null,
constraints: new { id = @"^\d+$" } // Only integers
);
// Controllers with Actions
// To handle routes like `/api/VTRouting/route`
config.Routes.MapHttpRoute(
name: "ControllerAndAction",
routeTemplate: "api/{controller}/{action}"
);
为什么我不能更改方法的名称或在现有的控制器中添加一个新方法?或者我应该说,我如何才能添加一个方法,并让它大摇大摆地展示出来?
我试图在我的Spring应用程序中实现API版本控制。 所以我想做这样的事情api_url/{版本}/{参数} 假设我已经更改了一个endpoint函数,那么我可以将新函数映射到新版本的新url。但是我希望其他未更改的函数映射到两个版本的url,比如API _ URL/{旧版本}/{旧参数}和API _ URL/{新版本}/{旧参数} 因此,如果我能够实现这样的东西,它将帮助我避免在Java类中重
我有两个控制器和。 在中,我有一个名为的方法。 如何在中访问此方法?
问题内容: 使用SceneBuilder。我有2个阶段,每个阶段都有一个控制器: , 。 Stage1Controller: Stage2Controller: 这是使用2种方法 (称为in 方法)将这两个fxml文件加载到Main.java类中的方式: 该方法在第一阶段中用作方法,它在两个阶段都转换视图。 如何输入方法?谢谢 问题答案: “快速又脏”的方法是给的引用: 现在在您的主应用程序中:
问题内容: 我正在尝试建立一个视图-我设置了两个控制器进行练习,一个是HeaderCtrl,其中包含一些数据(网站标题,标题背景等),另一个应该具有页面的主要内容- MainCtrl。 在定义路线时,我这样做是: 这工作得很好,但是我想要为此指定多个参数,如下所示: 这行不通,所以我猜这不是做到这一点的方法。我实际上要问的是-您可以在$ routeProvider中指定多个控制器吗?还是构建此视图
问题内容: 我有一个由一个控制器控制的fxml文件。我想将控制器分成多个部分,就像放置在一个控制器中会产生很长的代码一样。不幸的是,fx:controller只能放在根目录中。我对如何分离控制器有什么建议吗? 问题答案: 我建议创建自定义控件-使用几个较小的FXML文件,而不是一个大FXML文件。 这是本教程: http://docs.oracle.com/javafx/2/fxml_get_st