ASP.Net WebAPI中一个控制器中的多个方法

时间:2017-12-06 11:16:18

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

这是StackOverflow上的第一篇文章。我是WebAPI的新手。

我在ASP.Net中已经运行并运行了WebService。我们公司希望将Web Service转换为ASP.Net WebAPI。我有一个简单的几个随机函数类,它接受多个参数并返回字符串或bool或小数。请记住,所有15种方法都没有关系,就像你可以说类名是“GeneralKnowledge” 这里有几个功能

1. public string GetPresidentName(DateTime OnTheDate,string CountryName)
2. public DateTime GetReleaseDateOfMovie(string MovieName)
3. public void AddNewCityNames(string[] CityNames)

所有这些都是Web Service中的WebMethod。我想创建WebAPI,我将从C#.Net WinForm应用程序中调用它们,或者与其他人共享此API以收集更多数据并共享更多数据

主要问题是我应该为一个控制器下的每个方法或操作创建单独的控制器。

当有人在一个控制器下创建多个方法时,你能否分享任何示例代码。

感谢你 Ishrar。

1 个答案:

答案 0 :(得分:0)

您可以根据需要在控制器中执行任意数量的操作。 只需使用属性路由 attribute-routing-in-web-api-2

我不建议在一个控制器中添加15个动作。您可以将它们聚合成几个控制器(如PresidentController,MovieController,RegionController)。如果您的行为彼此之间没有任何共同点,那么您可以创建许多不同的控制器。具有一个动作的15个控制器更易于维护和读取,然后一个控制器具有15个动作。 但最好的选择是创建几个控制器,每个控制器中的操作很少。

样本控制器:

[RoutePrefix("api/presidents")]
public class PresidentsController : ApiController
{
    [Route("GetFirstPresident/{countryName}")]
    public IHttpActionResult GetFirstPresident(string countryName)
    {
        var president = string.Format("First president of {0} was XYZ", countryName);
        return Ok(president);
    }

    [Route("GetPresident/{number}/{countryName}")]
    public IHttpActionResult GetPresident(int number, string countryName)
    {
        var president = string.Format("{1} president of {0} was XYZ", countryName, number);
        return Ok(president);
    }
}

WebApiConfig.cs:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services
        // Configure Web API to use only bearer token authentication.
        config.SuppressDefaultHostAuthentication();
        config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));

        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}