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.
Author
List all ASP.NET tutorials.