I have following methods in Repository Class
public class LibraryRepository : IBookRepository
{
LibraryContext context = new LibraryContext();
public decimal findBookPrice(int book_id)
{
var bookprice = (
from r in context.Books
where r.Book_Id == book_id
select r.Price
).FirstOrDefault();
return bookprice;
}
public decimal findBookPrice(int book_id, string bookname)
{
var bookprice = (
from book in context.Books
where book.Book_Id == book_id & book.Book_Title == bookname
select book.Price
).FirstOrDefault();
return bookprice;
}
}
Then I'm trying to get those two methods separately in Web API
public class BooksWithAuthersController : ApiController
{
private LibraryRepository db = new LibraryRepository();
// GET: api/BooksWithAuthers/id/Price
[ResponseType(typeof(decimal))]
[Route("api/BooksWithAuthers/{id}/Price")]
public IHttpActionResult GetBooksPriceById(int id)
{
decimal bookprice = db.findBookPrice(id);
return Ok(bookprice);
}
// GET: api/BooksWithAuthers/id,name/Price
[ResponseType(typeof(decimal))]
[Route("api/BooksWithAuthers/{id,name}/Price")]
public IHttpActionResult GetBooksPriceById(int id,string name)
{
decimal bookprice = db.findBookPrice(id,name);
return Ok(bookprice);
}
}
Here first method working fine, but How can I handle scenario with multiple parameters
I am not sure if this
{id,name}
is even possible.You are getting the exception because routing module is reading 5,test as single attribute and is not able serialize it to int for methodpublic IHttpActionResult GetBooksPriceById(int id)
You need to change your methods as below considering nullable types (int?) and also change the route
Reference - https://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx
Set your parameter as a
nullable
type like below:and set a condition simply to check
nullable
parameter like below:Hope this will help you
Thanks