gpt4 book ai didi

c# - Web API Controller 中的多个 HttpPost 方法

转载 作者:IT王子 更新时间:2023-10-29 03:33:22 25 4
gpt4 key购买 nike

我开始使用 MVC4 Web API 项目,我有多个 Controller HttpPost方法。 Controller 如下所示:

Controller

public class VTRoutingController : ApiController
{
[HttpPost]
public MyResult Route(MyRequestTemplate routingRequestTemplate)
{
return null;
}

[HttpPost]
public MyResult TSPRoute(MyRequestTemplate routingRequestTemplate)
{
return null;
}
}

在这里 MyRequestTemplate表示负责处理来自请求的 Json 的模板类。

错误:

当我使用 Fiddler 为 http://localhost:52370/api/VTRouting/TSPRoute 发出请求时或 http://localhost:52370/api/VTRouting/Route我得到一个错误:

Multiple actions were found that match the request

如果我删除上述方法之一,它会正常工作。

Global.asax

我试过修改global.asax中的默认路由表,但我仍然收到错误,我认为我在 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。

最佳答案

您可以在一个 Controller 中执行多个操作。

为此你必须做以下两件事。

  • 首先用 ActionName 属性装饰 Action ,例如

     [ActionName("route")]
    public class VTRoutingController : ApiController
    {
    [ActionName("route")]
    public MyResult PostRoute(MyRequestTemplate routingRequestTemplate)
    {
    return null;
    }

    [ActionName("tspRoute")]
    public MyResult PostTSPRoute(MyRequestTemplate routingRequestTemplate)
    {
    return null;
    }
    }
  • 然后在 WebApiConfig 文件中定义以下路由。

    // 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}"
    );

关于c# - Web API Controller 中的多个 HttpPost 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11407267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com