C # WebApi Controller (State Controller Currently has 2 Get methods, 1 returns List, second returns Single Item)

My WebApiConfig:

 public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API configuration and services

            // Web API routes
            config.MapHttpAttributeRoutes();


            ODataModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<Applicant>("Applicants");
            builder.EntitySet<Country>("Countries");
            builder.EntitySet<Program>("Programs");
            builder.EntitySet<Campus>("Campuses");
            builder.EntitySet<AcademicYear>("AcademicYears");
            builder.EntitySet<Citizenship>("Citizenships");
            builder.EntitySet<ProgramChoice>("ProgramChoices");
            builder.EntitySet<Application>("Applications");
            builder.EntitySet<ProvinceState>("States");

            config.MapODataServiceRoute(
              routeName: "ODataRoute",
              routePrefix: null,
              model: builder.GetEdmModel());




            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{key}",
                defaults: new { key = RouteParameter.Optional }
            );
        }
    }

My Controller Get Method Returns a list of items:

   [EnableQuery]
        public IQueryable<ProvinceState> Get()
        {
            return db.ProvinceStates;
        }

My Controller Get method Return one item:

[EnableQuery]
public SingleResult<ProvinceState> Get([FromODataUri] string key)
{
    IQueryable<ProvinceState> result = db.ProvinceStates.Where(c => c.ProvinceStateCode == key);
    return SingleResult.Create(result);
}

The problem is this:

  • When I execute the LocalHost request: ### / States, the Get methods return a list of states properly without any problems.
  • But when I make a LocalHost request: ### / States ('AL') to get the specific item back, I get the following error.

HTTP Error 404.0 - Not Found

The resource you are looking for has been deleted, its name has changed or is temporarily unavailable.

get, , GET. List GET.

, .

+4
1

, ProvinceStateCode CountryCode, Get, .

[HttpGet]
[ODataRoute("States(ProvinceStateCode={stateCode},CountryCode={countryCode})")]
[EnableQuery]
public IHttpActionResult Get([FromODataUri] string stateCode, [FromODataUri] string countryCode)
{
    var result = db.ProvinceStates.FirstOrDefault(c => c.ProvinceStateCode == stateCode && c.CountryCode == countryCode);

    if (result == null)
    {
        return NotFound();
    }
    else
    {
        return Ok(result);
    }
}

:

GET http://host/States(ProvinceStateCode='AL',CountryCode='US')
+5

All Articles