netchicken
netchicken

Reputation: 485

QueryString is always empty ASP.net Core 3.1

The query string I use is always empty. I have no idea why, and have tried for hours with The HttpContext.Request returns all other parts of the URL except the querystring.

With this url https://localhost:44394/Trackers/Create?Place=Vision_College

and this Model

 [BindProperties(SupportsGet = true)] 
    public partial class Tracker
    {  
     [FromQuery(Name = "Place")]  //populates it from the query 
      public string Place { get; set; }
     ...}

and this controller

 [HttpPost]
 [ValidateAntiForgeryToken]
 public async Task<IActionResult> Create([Bind("Name, Phone, Place")] Tracker tracker)
        {

Empty Query

Upvotes: 1

Views: 4107

Answers (2)

netchicken
netchicken

Reputation: 485

OK I found an answer. I was trying to use it in the POST of the CREATE, when I should have been using it in the GET part of CREATE Using GET to get querystring

Thanks for everyones help!

Upvotes: 1

Lasanga Guruge
Lasanga Guruge

Reputation: 874

Since you are using the query parameters in httpPost you should use, [FromQuery] inside your arguments. Follow this

Your DTO class would be,

public class Tracker
{
  [FromQuery(Name = "Place")]
  public string Place{ get; set; }
}

In your controller class


[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([FromQuery]Tracker tracker)
{

}

Note: If your query parameters match with the model property names, specifically annotating the properties would not be necessary.

Better you can get by body itself since this is a post request. otherwise make this as a get request. If converting to get by body, simply use [FromBody] in endpoint arguments instead of [FromQquery]

Upvotes: 0

Related Questions