{"id":31879396,"url":"https://github.com/stringepsilon/theseus","last_synced_at":"2026-02-25T19:04:09.697Z","repository":{"id":305819062,"uuid":"709412820","full_name":"StringEpsilon/Theseus","owner":"StringEpsilon","description":"URL Generator / IUrlHelper extension for asp.net","archived":false,"fork":false,"pushed_at":"2025-04-19T16:49:53.000Z","size":31,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-10T22:11:34.577Z","etag":null,"topics":["actions","aspnet-core","dotnet","mvc","routing"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/StringEpsilon.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-10-24T17:04:00.000Z","updated_at":"2025-04-19T16:49:56.000Z","dependencies_parsed_at":"2025-07-22T07:33:54.921Z","dependency_job_id":"c941373a-9df9-4cf6-b6d3-32f050a8444b","html_url":"https://github.com/StringEpsilon/Theseus","commit_stats":null,"previous_names":["stringepsilon/theseus"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/StringEpsilon/Theseus","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StringEpsilon%2FTheseus","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StringEpsilon%2FTheseus/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StringEpsilon%2FTheseus/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StringEpsilon%2FTheseus/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/StringEpsilon","download_url":"https://codeload.github.com/StringEpsilon/Theseus/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/StringEpsilon%2FTheseus/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279013645,"owners_count":26085298,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["actions","aspnet-core","dotnet","mvc","routing"],"created_at":"2025-10-13T00:28:57.876Z","updated_at":"2025-10-13T00:28:58.748Z","avatar_url":"https://github.com/StringEpsilon.png","language":"C#","readme":"# Theseus\n\n`IUrlHelper` extensions to point at a controller method to generate links.\n\nExample:\n\n```cs\n// Regular IUrlHelper:\nstring aboutUrl = Url.Action(\"About\", \"Home\");\nstring buyUrl = Url.Action(\"Buy\", \"Products\", new { id = 17, color = \"red\" });\n\n// Theseus:\nstring aboutUrl = Url.To\u003cHomeController\u003e(y =\u003e y.About());\nstring buyUrl = Url.To\u003cProductsController\u003e(y =\u003e y.Buy(17, \"red\"));\n```\n\nThis library uses [EpsilonEvaluator](https://www.nuget.org/packages/EpsilonEvaluator)\nto evaluate the route parameters from the method arguments. Most expressions should be evaluated without compilation and\ncompiled expressions are not cached.\n\nInspired by [AspNet.Mvc.TypedRouting](https://github.com/ivaylokenov/AspNet.Mvc.TypedRouting) from Ivaylo Kenov.\n\n## Performance\n\nTheseus is of course slower than generating the links the regular way.\n\nIf you want expression based routing with *really* good performance, take a look at https://github.com/mariusz96/uri-generation,\nit beats Theseus consistently, sometimes by as much as 200%. But the API is very different.\n\n**Generate links to method without parameters:**\n| Method                                       | Links per second | Note                      |\n| -------------------------------------------- | ---------------- | ------------------------- |\n| `Url.To\u003cHomeController\u003e(y =\u003e y.Index())`     | 2085989          | Theseus with cache        |\n| `Url.To\u003cHomeController\u003e(y =\u003e y.Index())`     | 591933           | Theseus without cache     |\n| `Url.Action\u003cHomeController\u003e(y =\u003e y.Index())` | 535429           | from Panelak.TypedRouting |\n| `Url.Action(\"Index\", \"Home\")`                | 1105261          | -                         |\n\n**Generate links to method with scoped variable parameter:**\n| Method                                          | Links per second | Note                      |\n| ----------------------------------------------- | ---------------- | ------------------------- |\n| `Url.To\u003cHomeController\u003e(y =\u003e y.List(page))`     | 442179           | Cache not applicable      |\n| `Url.Action\u003cHomeController\u003e(y =\u003e y.List(page))` | 401513           | from Panelak.TypedRouting |\n| `Url.Action(\"List\", \"Home\", new { page })`      | 976240           | -                         |\n\n**Generate links to method with property parameter:**\n| Method                                                        | Links per second | Note                      |\n| ------------------------------------------------------------- | ---------------- | ------------------------- |\n| `Url.To\u003cHomeController\u003e(y =\u003e y.List(this.CurrentPage))`       | 404453           | Without cache             |\n| `Url.Action\u003cHomeController\u003e(y =\u003e y.List(this.CurrentPage))`   | 8729             | from Panelak.TypedRouting |\n| `Url.Action(\"List\", \"Home\", new { page = this.CurrentPage })` | 982898           | -                         |\n\n\n\n## Thanks\n\n- blockmath_2048 for the name suggestion.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstringepsilon%2Ftheseus","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstringepsilon%2Ftheseus","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstringepsilon%2Ftheseus/lists"}