Go to file
Ehsan Mohandesi e7fbc6559d Fix 500 on failed login by encoding the redirect parameters
After a rejected login the site redirects back to /login carrying the API's
error message in the query string. That message is Persian, and HTTP header
values must be ASCII, so Kestrel threw InvalidOperationException and the user
got an error page instead of the login form with the reason for the failure.
Encode both the path and the message.

Not noticed before because IIS Express tolerates the non-ASCII Location header;
it surfaces as soon as the site is run on Kestrel.
2026-09-13 22:16:28 -05:00
docs/getting-started documents 2026-08-14 18:46:17 +03:30
GanjooRazor Fix 500 on failed login by encoding the redirect parameters 2026-09-13 22:16:28 -05:00
RMuseum moderation new option 2026-09-13 13:39:48 +03:30
TajikGanjoor tajik recitation fix 2026-09-12 13:28:23 +03:30
.gitattributes Add project files. 2020-08-14 21:06:22 +04:30
.gitignore Add project files. 2020-08-14 21:06:22 +04:30
GanjoorService.sln refactoring 2026-07-19 16:50:22 +03:30
LICENSE Create LICENSE 2020-08-14 21:35:13 +04:30
README.md semantic search dev guide 2026-09-11 08:33:31 +03:30
RUNNING_LOCALLY.md documentations 2026-08-14 19:41:04 +03:30
SEMANTIC_SEARCH_SETUP.md semantic search dev guide 2026-09-11 08:30:48 +03:30

GanjoorService

Ganjoor museum and ganjoor.net own backend (ASP.NET Core Web API) and frontend (Razor Pages) code

این کد وب سرویس گنجینهٔ گنجور و گنجور و همچنین کد سایت گنجور است.

فهرست توابع در دسترس

https://api.ganjoor.net

Running it locally

New to this codebase and want to run your own copy? See RUNNING_LOCALLY.md for a full step-by-step guide — cloning, database setup, and Visual Studio configuration.

The one thing that guide covers in more depth but is worth knowing up front: the production database is never published, since it contains private/user-linked data. What is published is a git repository of the poetry content itself (poets, categories, poems — allowlisted, no user data): github.com/ganjoor/ganjoor-data. A fresh local install can pull real content from there via Admin → مالی و سایت → درون‌ریزی دادهٔ عمومی (also reachable automatically the first time you run the site against an empty database) instead of starting from nothing.

The "find a poem about..." feature has its own setup guide, separate from the main one above — it needs a downloaded ONNX model and published embeddings data on top of the usual database setup: SEMANTIC_SEARCH_SETUP.md. Also has a real troubleshooting section covering the actual problems hit building this feature, not a generic checklist — worth reading before assuming something new is broken.