【问题标题】:Routing to different WebAPI controller's action where optional route param exists路由到存在可选路由参数的不同 Web API 控制器操作
【发布时间】:2016-03-17 01:15:11
【问题描述】:

我的 MVC 4 项目 API 路由配置如下:

WebApiConfig.cs:

  public static class WebApiConfig
  {
    public static void Register(HttpConfiguration config)
    {
        var company = System.Configuration.ConfigurationManager.AppSettings["DbCompany"];
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "MyApp/"+ company +"/{id}",
            defaults: new { controller = "main" , id = RouteParameter.Optional }
       );
       config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
    }

 }

并且 MainController.cs 包含以下方法:

    public JToken Get(string id)
    {
        ...
    }

    public JToken Get()
    {
        ...
    }

    [HttpPost]
    public JToken DoQuery([FromBody] String query)
    {
        ...
    }

    public void Post([FromBody] JObject JsonObject)
    {
       ...
    }

我想要实现的是任何不是的路线:

     route: /MyApp/MyComp/DoQuery
     method: POST 
     ContextType: text/plain 
     Returns: JToken 

使用主控制器的普通 Get/Post 否则在主控制器中使用 DoQuery。

【问题讨论】:

  • 请检查我的编辑是否与您的问题相符 - 根据看起来是 WebAPI 的代码,但您的文字似乎是指 MVC 控制器/路由。
  • 是的,谢谢。

标签: c# asp.net-mvc asp.net-web-api


【解决方案1】:

似乎您缺少的只是映射到DoQuery 的特殊情况路由。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var company = System.Configuration.ConfigurationManager.AppSettings["DbCompany"];

        config.Routes.MapHttpRoute(
            name: "DoQuery",
            routeTemplate: "MyApp/"+ company +"/DoQuery",
            defaults: new { controller = "main", action = "DoQuery" }
        );

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "MyApp/"+ company +"/{id}",
            defaults: new { controller = "main" , id = RouteParameter.Optional }
        );
        config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
    }

}

【讨论】:

  • 执行此操作时,我在尝试向 MyApp/MyComp 发布 Json 数据时出现以下错误:找到与请求匹配的多个操作:Newtonsoft.Json.Linq.JToken DoQuery(System.String)在 MyApp.Controllers.MainController 类型上\r\nVoid Post(Newtonsoft.Json.Linq.JObject) 在 MyApp.Controllers.MainController 类型上
猜你喜欢
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多