Search code examples
asp.net-coreodata

ASP.NET Core 3.1 unable to get Odata Query parameter


Using ASP.NET Core 3.1 and Microsoft.AspNetCore.OData 7.5.6,

When a HTTP "DELETE" request is sent to an action method, I am unable to get the query parameter, the resulting parameter value remains set to 0.

Here is my HTTP Request:

https://localhost:8083/api/EventTypes(Id%3D66L)

And my Action Method:

    [Route("api/EventTypes({Id})")]
    [HttpDelete]
    // [AcceptVerbs("DELETE")]
    public async Task<IActionResult> Delete(Int64 Id)
    {
        DynamicParameters param = new DynamicParameters();
        param.Add("Id", Id);
        await Dapper.DapperORM.ExecuteWithoutReturn("event_type_delete", param);
        return Ok();
    }

When I inspect the value of Id the value is 0. I have tried changing the type to string, and then the value is set to "Id=66L".

I expect this to work but it does not in my case:

Delete([FromODataUri]Int64 Id)

What is the best/correct way to get the integer value?


Solution

  • Changing the Route Parameter to use this format Id={Id} and using FromODataUri I managed to get the desired parameter value.

    e.g.

        [Route("api/EventTypes(Id={Id})")]
        [AcceptVerbs("DELETE")]
        public async Task<IActionResult> Delete([FromODataUri]Int64 Id)