不能在第二个控制器上调用动作

本文关键字:调用 控制器 第二个 不能 | 更新日期: 2023-09-27 18:13:21

我有麻烦得到第二个控制器操作。我定义了第一个Controller并测试了它的所有方法,没有任何问题。当我试图调用第二个控制器上的方法时,我得到了以下错误消息:

<Error>
<Message>
No HTTP resource was found that matches the request URI 'http://localhost:9801/api/defense/getgameopponents/seattle seahawks'.
</Message>
<MessageDetail>
No action was found on the controller 'Defense' that matches the name 'get'.
</MessageDetail>
</Error>

我的第一个控制器- PlayerController.cs

namespace Test.Controllers
{
    public class PlayerController : ApiController
    {
         static readonly IPlayerRepository repository = new PlayerRepository();
    public List<Player> GetPlayers(string position, string teamName)
    {
        return PlayerController.repository.GetPlayers(position, teamName);
    }
    public List<Defense> GetPlayersPastOpponents(string position, string teamName, string playerName)
    {
        return PlayerController.repository.GetPlayerPastOpponents(new Player(playerName, teamName, position));
    }
    public List<Player> GetPlayerStats(string position, string teamName, string playerName)
    {
        return new List<Player>(){ PlayerController.repository.GetPlayerStats(new Player(playerName, teamName, position)) };
    }
}

}

控制器功能异常

namespace Test.Controllers
{
    public class DefenseController : ApiController
    {
        static readonly IDefenseRepository repository = new DefenseRepository();
        string[] GetGameOpponents(string team)
        {
            return DefenseController.repository.GetGameOpponents(team);
        }
        Defense GetOpponentsStats(string teamName)
        {
            return DefenseController.repository.GetOpponentStats(new Defense(teamName));
        }
    }
}

最后,我的路由表。我有一种强烈的感觉,这就是问题所在,但我不能指出来。这是我第一次创建这样一个项目,所以任何帮助都会非常感激。

  namespace Test
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            config.Routes.MapHttpRoute(
                name: "GetPlayerPastOpponentsApi",
                routeTemplate: "api/{controller}/{action}/{position}/{teamname}/{playername}"
            );
        config.Routes.MapHttpRoute(
            name: "GetPlayersApi",
            routeTemplate: "api/{controller}/{action}/{position}/{teamname}"
        );
        config.Routes.MapHttpRoute(
            name: "GetPlayerStatsApi",
            routeTemplate: "api/{controller}/{action}/{position}/{teamname}/{playername}"
        );
        config.Routes.MapHttpRoute(
            name: "GetGameOpponentsApi",
            routeTemplate: "api/{controller}/{action}/{team}"
        );
        config.Routes.MapHttpRoute(
            name: "GetOpponentsStatsApi",
            routeTemplate: "api/{controller}/{action}/{opponentname}"
        );
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        config.EnableSystemDiagnosticsTracing();
    }
}

}

不能在第二个控制器上调用动作

看起来您在操作方法上缺少public指定。

public /* <---THIS */ Defense GetOpponentsStats(string teamName)
{
    return DefenseController.repository.GetOpponentStats(new Defense(teamName));
}