Member 11881188
В WebApiConfig Вы можете установить столько маршрутов, сколько вам нужно,
В web APi вы можете иметь стандартный ApiController созданный контроллером MVC API, который имеет стандартные методы Rest API, как показано ниже, где я добавил еще один метод Get только для вашей демонстрации с входным параметром в качестве имени
public class TestController : ApiController
{
// GET: api/Test
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET: api/Test/5
public string Get(int id)
{
return "value";
}
public string Get(string name)
{
return "value";
}
// POST: api/Test
public void Post([FromBody]string value)
{
}
// PUT: api/Test/5
public void Put(int id, [FromBody]string value)
{
}
// DELETE: api/Test/5
public void Delete(int id)
{
}
}
Для такого типа контроллера вам не требуется никаких действий и вы можете просто установить маршрут как
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}"
);
при вызове фактического API вам нужно передать контроллер/ Get или Post, или Put, или Delete
но если у вас есть явные методы API с вашим собственным именем, то вы должны указать имя метода как действие.
config.Routes.MapHttpRoute(
name: "othernameApi",
routeTemplate: "{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
точно так же вы можете иметь еще один раут, как вам требуется.
config.Routes.MapHttpRoute(
name: "ApiByName",
routeTemplate: "{controller}/{action}/{name}",
defaults: null,
constraints: new { name = @"^[a-z]+$" }
);
Во всех случаях вы должны иметь непустое строковое значение action, если вам нужно установить параметры для ваших собственных действий. Если вам нужно использовать стандартные методы Get, Post, Delete, Put, то вы можете иметь несколько маршрутов только с контроллерами и параметрами. ниже приведен стандартный файл webApi.config как для стандартных, так и для ваших собственных действий API
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: "{controller}"
);
config.Routes.MapHttpRoute(
name: "DefaultApiwithid",
routeTemplate: "{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "DefaultApiwithname",
routeTemplate: "{controller}/{name}",
defaults: null,
constraints: new { name = @"^[a-z]+$" }
);
config.Routes.MapHttpRoute(
name: "CustomactionsApiwithid",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "customactionsApiwithname",
routeTemplate: "api/{controller}/{action}/{name}",
defaults: null,
constraints: new { name = @"^[a-z]+$" }
);
}
Пожалуйста, дайте мне знать, если вам понадобятся дальнейшие разъяснения.