ASP.NET query string
last modified October 18, 2023
In this article we show how to work with query strings in ASP.NET.
ASP.NET is a cross-platform, high-performance, open-source framework for building modern, cloud-enabled, web applications. It is developed by Microsoft.
Query strings
Query strings or query parameters are the part of a uniform resource locator (URL) which assigns values to specified parameters. This is one way of sending data to the destination server.
http://example.com/api/users?name=John%20Doe&occupation=gardener
The query parameters are specified after the ? character. Multiple fields are
separated with the &. Special characters, such as spaces, are encoded. In
the above string, the space is encoded with the %20
value
ASP.NET query string example
In the first example, we get the query strings via the HttpRequest
.
HttpRequest
represents the incoming side of an individual HTTP
request.
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", (HttpRequest request) => { string name = request.Query["name"]; string occupation = request.Query["occupation"]; string msg = $"{name} is a {occupation}\n"; return Results.Content(msg); }); app.Run("http://localhost:3000");
In the example, we get two query strings via the HttpRequest
.
string name = request.Query["name"];
We get the name
query parameter using the Query
property of the request object.
$ curl 'localhost:3000?name=John%20Doe&occupation=gardener' John Doe is a gardener
Explicit binding with FromQuery
It is possible to explicitly bind query parameters utilizing the
FromQuery
attribute.
using Microsoft.AspNetCore.Mvc; var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", ([FromQuery(Name = "name")] string? name, [FromQuery(Name = "occupation")] string? occupation) => { if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(occupation)) { return Results.BadRequest("bad request"); } string msg = $"{name} is a {occupation}\n"; return Results.Content(msg); }); app.Run("http://localhost:3000");
In the example, we explicitly bind two query parameters to two variables. In addition, the query strings are mandatory.
if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(occupation)) { return Results.BadRequest("bad request"); }
If we do not receive values for the two parameters, we send a bad request back to the client.
$ curl 'localhost:3000?name=Roger%20Roe&occupation=driver' Roger Roe is a driver
For a correct request with all query parameters, we get a response.
$ curl 'localhost:3000?name=Roger%20Roe' "bad request"
Since we did not provide the second parameter, we have received a bad request response.
Automatic binding of query parameters
ASP.NET automatically binds query, form, and path parameters to types.
var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.MapGet("/", (string name, string occupation) => { string msg = $"{name} is a {occupation}\n"; return Results.Content(msg); }); app.Run("http://localhost:3000");
In the example, we ASP.NET automatically binds the query parameters to the
name
and occupation
variables.
$ curl 'localhost:3000?name=Roger%20Roe&occupation=driver' Roger Roe is a driver
Query parameters in a view
We can get query parameters in a view via @Context.Request.Query
.
var builder = WebApplication.CreateBuilder(args); builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseRouting(); app.UseEndpoints(endppoints => { endppoints.MapDefaultControllerRoute(); }); app.Run("http://localhost:3000");
We set up an ASP.NET application with controllers and views.
using Microsoft.AspNetCore.Mvc; namespace QueryStringEx.Controllers; public class HomeController : Controller { [HttpGet("/")] public IActionResult Home() { return View(); } }
In the controller, we have a single mapping that returns a view for the home page.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Home page</title> </head> <body> <p> @Context.Request.Query["name"] is a @Context.Request.Query["occupation"] </p> </body> </html>
In the view, we refer to two query parameters.
$ curl 'localhost:3000?name=Roger%20Roe&occupation=driver' <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Home page</title> </head> <body> <p> Roger Roe is a driver </p> </body>
We create a GET request with two query parameters and receive an HTML output.
In this article we worked with query strings in ASP.NET.