Reputation: 21
Webapimethod Work well in RestConsole but when that Webapi method is called in AndroidApplication it shows Error
{ "Message": "No HTTP resource was found that matches the request URI 'http://beatrootstudios.co.in/api/apiCityInfo/PostSearchByCategory'.",
"MessageDetail": "No action was found on the controller 'apiCityInfo' that matches the request." }
Even I tried My chaging Controller Name From CityInfo To apiCityInfo and also By Various Routing Tricks as mentions in many examples in google
I also tried by putting Actionname with httppost verb as mentioned in controller below ...
My Contoller Code Is
public class apiCityInfoController : ApiController
{
private DBContext db = new DBContext();
[HttpPost, ActionName("PostSearchByCategory")]
public IHttpActionResult PostSearchByCategory(string CategoryName)
{
var errorMessage = "";
int errorCode = 0;
//string json = null;
string jsonResult = "Error";
var SubCategory = db.CityDatas.Where(x => x.CategoryName.Equals(CategoryName)).ToList().FirstOrDefault().SubCategoryName;
try
{
if (SubCategory !=null)
{
//errorMessage = " Login ID cannot be Null ";
//errorCode = 1;
var SubCategoryresult = (from p in db.CityDatas
where p.CategoryName.Equals(CategoryName)
select new
{
SubCategoryName = p.SubCategoryName,
}
).ToList();
var data = new
{
Result = new
{
//ErrorCode = errorCode,
//ErrorMessage = errorMessage,
ResultSet = SubCategoryresult,
}
};
return Json(data);
}
else
{
var Dataresult = (from p in db.CityDatas
where p.CategoryName.Equals(CategoryName)
select new
{
DataImage = p.DataImage,
DataName = p.DataName,
DataAddress = p.DataAddress,
DataPhoneNo = p.DataPhoneNo,
}
).ToList();
var data = new
{
Result = new
{
ResultSet = Dataresult,
}
};
//jsonResult = JsonConvert.SerializeObject(data);
return Json(data);
}
}
catch (Exception e)
{
errorCode = 401;
errorMessage = e.Message;
var data = new
{
Result = new
{
ErrorCode = errorCode,
ErrorMessage = "CategoryName Not Exists",
}
};
jsonResult = JsonConvert.SerializeObject(data);
}
return Ok(jsonResult);
}
Model Part Is
[Table("CityInfo")]
public class CityData
{
//[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
[Key]
public int CityInfo_Id { get; set; }
public String CategoryName { get; set; }
public String SubCategoryName { get; set; }
public String DataImage { get; set; }
public String DataName { get; set; }
public String DataAddress { get; set; }
public String DataPhoneNo { get; set; }
}
DBContext in Model
public class DBContext : DbContext
{
public DBContext()
: base("name=DefaultConnection")
{
}
public DbSet<WebApi.Models.CityData> CityDatas { get; set; }
}
Table Definition Is
CREATE TABLE [dbo].[CityInfo] (
[CityInfo_Id] INT IDENTITY (1, 1) NOT NULL,
[CategoryName] NVARCHAR (100) NULL,
[SubCategoryName] NVARCHAR (100) NULL,
[DataImage] NVARCHAR (MAX) NULL,
[DataName] NVARCHAR (100) NULL,
[DataAddress] NVARCHAR (300) NULL,
[DataPhoneNo] NVARCHAR (100) NULL,
PRIMARY KEY CLUSTERED ([CityInfo_Id] ASC)
);
WebApi Config.cs file Is
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
//name: "DefaultApi",
//routeTemplate: "api/{controller}/{id}",
//defaults: new { id = RouteParameter.Optional }
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { action = "Post", id = RouteParameter.Optional }
);
}
}
Route Config.cs file Is
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Global.asx File is
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Database.SetInitializer<DBContext>(null);
}
}
What am I doing wrong? How can I fix the error?
Upvotes: 2
Views: 881
Reputation: 2840
The parameter CategoryName
is non-optional, so you need to include it as a parameter in your request. The URL should look like this: http://beatrootstudios.co.in/api/apiCityInfo/PostSearchByCategory?CategoryName=category
and you probably want to make this a GET action, as opposed to a POST.
Upvotes: 0