Maneendra
Maneendra

Reputation: 21

No HTTP resource was found that matches the request URI 'Myurl' No action was found on the controller 'controllername' that matches the request

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

Answers (1)

Tobias
Tobias

Reputation: 2840

The parameter CategoryNameis 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

Related Questions