Reputation: 31
I am creating a Web Api Controller. I want to create multiple Get function in the single Controller. See the below:
// GET api/User/5
[ResponseType(typeof(UserModel))]
public IHttpActionResult GetUser(Guid id)
{
var item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
else
{
return Ok(item);
}
}
// GET api/User/GetCities/5
[ResponseType(typeof(CityModel))]
public IHttpActionResult GetCities(int id)
{
var item = repository.GetCities(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
else
{
return Ok(item);
}
}
Below is my WebApi Route Config
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// Controllers with Actions
// To handle routes like `/api/VTRouting/route`
config.Routes.MapHttpRoute(
name: "DefaultApiwithActionID",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
Below is my API Controller
// GET api/User/5
[ResponseType(typeof(UserModel))]
[Route("api/UserApi/GetUser")]
public IHttpActionResult GetUser(Guid id)
{
var item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
else
{
return Ok(item);
}
}
// GET api/User/5
[ResponseType(typeof(TanentDocumentsModel))]
[Route("api/UserApi/GetUserDocuments")]
public IHttpActionResult GetUserDocuments(Guid id)
{
var item = repository.GetUserDocuments(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
else
{
return Ok(item);
}
}
// GET api/User/GetCities/5
[ResponseType(typeof(CityModel))]
[Route("api/UserApi/GetCities")]
public IHttpActionResult GetCities(int id)
{
var item = repository.GetCities(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
else
{
return Ok(item);
}
}
// GET api/User/GetCities/5
[ResponseType(typeof(StateModel))]
[Route("api/UserApi/GetStates")]
public IHttpActionResult GetStates(int id)
{
var item = repository.GetStates(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
else
{
return Ok(item);
}
}
How can I do this, so that I can call both function through URL?
Upvotes: 0
Views: 1661
Reputation: 41
The easiest way, to update webapiconfig file.
// GET api/User/5
[HttpGet]
[ResponseType(typeof(UserModel))]
[Route("api/User/{id}")]
public IHttpActionResult GetUser(Guid id)
{
var item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
else
{
return Ok(item);
}
}
// GET api/User/GetCities/5
[ResponseType(typeof(CityModel))]
[Route("api/User/GetCities/{id}")]
public IHttpActionResult GetCities(int id)
{
var item = repository.GetCities(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
else
{
return Ok(item);
}
}
You also have to assign that into Area API Folder ApiAreaRegistration.cs File
context.Routes.MapHttpRoute(
"Api_default",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { area = "Api", id = RouteParameter.Optional }
);
like this, you have to assign according to your project
Upvotes: 0
Reputation: 1769
using route specified on method and in webapiconfig file.
like On method
[ResponseType(typeof(UserModel))]
[HttpGet]
[Route("api/getusers/{id}")]
public IHttpActionResult GetUser(Guid id)
{
var item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
else
{
return Ok(item);
}
}
like others
[Route("api/getcities/{id}")]
or you can specified in file
config.Routes.MapHttpRoute(
name: "users",
routeTemplate: "api/getusers/{id}",
defaults: new { action = "GetUser", controller = "Users" }
);
like this you can specified others
Upvotes: 4
Reputation: 16801
The easiest way, IMO, would be to do this with attribute routing. Add the route parameter infront of each method where you can specify the methods route.
// GET api/User/5
[ResponseType(typeof(UserModel))]
[Route("api/User/{id}")]
public IHttpActionResult GetUser(Guid id)
{
var item = repository.Get(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
else
{
return Ok(item);
}
}
// GET api/User/GetCities/5
[ResponseType(typeof(CityModel))]
[Route("api/User/GetCities/{id}")]
public IHttpActionResult GetCities(int id)
{
var item = repository.GetCities(id);
if (item == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
else
{
return Ok(item);
}
}
Upvotes: 2