Skip to content

Controllers routing

Alexanderius edited this page Jun 6, 2024 · 3 revisions

Controllers routing

In the Get, Post, Put, Patch and Delete controller attributes you can specify a way how a controller handles request path.

If a current request path is matched controller's path and request method (GET, POST etc.) only then the controller will be executed, otherwise the controller with the Http404 attribute will be executed or HTTP 404 status will be returned to a client (if there is not controller with Http404 attribute).

Basic routing

Multiple routes example

// Controller will process both HTTP GET and POST request with "/foo" path
[Get("foo")]
[Post("foo")]
public class FooController : Controller
{
	public override ControllerResponse Invoke()
	{
		return StaticTpl("Foo");
	}
}

Controller dynamic parts in v1 controllers

In the controller routing you can specify a dynamic parts which will be parsed and converted to a variable, which then can be accessed via the controller property RouteParameters:

"/foo/{var-name}" or "/foo/{var-name:var-type}"

var-name - variable name, var-type variable type.

Example

[Get("/user/show/{userName}")]
public class EditUserController : Controller
{
	public override ControllerResponse Invoke()
	{
		// Getting parsed user name
		var currentUserName = RouteParameters.userName;
		...
	}
}

On request like "http://mywebsite.com/user/show/foouser", currentUserName variable will contain foo-user.

Specifying variable type in v1 controllers

[Get("/user/edit/{id:int}")]
public class EditUserController : Controller
{
	public override ControllerResponse Invoke()
	{
		var id = RouteParameters.id;
		...
	}
}

On request like "http://mywebsite.com/user/edit/15", id variable will contain 15 and will be of an integer type.

Controller dynamic parts in v2 controllers

In the controller routing you can specify a dynamic parts which will be parsed and converted to a variable, which then can be accessed via the controller property RouteParameters:

"/foo/{var-name}"

var-name - variable name

The respective route parameters values can be accessed via method parameters with the same name. The method parameter type will specify the respective route parameter type.

The names of the parameters are case insensitive.

Example

[Get("/some-request/{foo}/{bar}/{test}")]
public class ExampleController : Controller2
{
	public void Invoke(string foo, bool bar, int test)
	{
		...
	}
}

On request like "http://mywebsite.com/some-request/str/true/5", foo parameter will contain str, bar parameter will contain true, test parameter will contain 5.

Current supported variables types

  • string
  • int
  • decimal
  • bool
  • string[]
  • int[]
  • decimal[]
  • bool[]

If the variables type is not specified, then it will be parsed as a string.

If the variable type is not matched with an actual value, for example, controller path is "/user/edit/{id:int}", actual URL is "http://mywebsite.com/user/edit/foo", then a controller with Http404 attribute will be executed (or HTTP 404 error returned to the client).

You can specify multiple dynamic parts in any ways:

  • "/foo/{myvar}/bar/{myvar2:int}"
  • "/foo/bar/{myvar}/{myvar2:int}/{myvar3}"

<< Previous page Next page >>

Clone this wiki locally