Маршрутизация пользовательского поддомена Asp.Net MVC не работает

У меня есть проект, в котором вы можете регистрировать сообщения с определенным UID, и другие люди смогут получить доступ к этому сообщению, используя UID этого сообщения в качестве поддомена.

Let's say you register a post by this UID => "test"
then others can access that post with 2 URLs

fisrt => test.mydomain.com
second => mydomain.com/home/Post?Id=test

Итак, я загрузил проект на хост Plesk и попросил хостинг-провайдера активировать подстановочный знак для моего хоста и внести необходимые изменения в IIS, чтобы эта система маршрутизации заработала.

Все работает на локальном хосте, даже я изменил файл «host», поэтому я могу протестировать проект с реальным доменным именем на локальном хосте, и он работает, но на удаленном хосте он не работает и приводит меня на эту страницу:

Страница веб-сервера по умолчанию:

Вот класс пользовательского маршрута:

namespace _360V.App_Start
{
    public class TRoute : RouteBase
    {
        API api = new API();
        public override RouteData GetRouteData(HttpContextBase httpContext)
        {
            if (httpContext.Request == null || httpContext.Request.Url == null)
            {
                api.log(new Log() { Des = "CustomRouteInfo, Null Request & RequestUrl" });
                return null;
            }

            string host = httpContext.Request.Url.Host;
            string[] hostSplit = host.Split('.');
            string subDomain = "";

            if (hostSplit.Length < 2)
            {
                // go home
                return null; 
            }else if (hostSplit.Length == 3)
            {
                if (hostSplit[0].ToLower() == "www")
                    return null;//go home
                else
                    subDomain = hostSplit[0];
            }else if (hostSplit.Length == 4)
            {
                if (hostSplit[0] == "www")
                    subDomain = hostSplit[1];
                else
                    return null;//go home
            }
            else
            {
                return null;//go home
            }

            string[] segments = httpContext.Request.Url.PathAndQuery.TrimStart('/').Split('/');

            string controller = (segments.Length > 0) ? segments[0] : "Home";
            string action = (segments.Length > 1) ? segments[1] : "Index";

            if (string.IsNullOrWhiteSpace(controller))
                controller = "Home";
            if (string.IsNullOrWhiteSpace(action))
                action = "Index";

            if (segments.Length >= 3 && (segments[1] == "Complex" || segments[1] == "Post"))
            {
                string u = httpContext.Request.Url.Authority;
                string scheme = httpContext.Request.Url.Scheme;
                string[] sp = u.Split('.');
                u = sp[sp.Length - 2] + "." + sp[sp.Length - 1];
                if (segments[1] == "Complex")
                    httpContext.Response.RedirectPermanent(scheme + "://" + u + "/Home/Complex?Id = " + subDomain);
                else if (segments[1] == "Post")
                    httpContext.Response.RedirectPermanent(scheme + "://" + u + "/Home/Post?Id = " + subDomain);

                api.log(new Log() { Des = "Segment Lenght >= 3, Segment[1] => " + segments[1] });
                return null;
            }

            var routeData = new RouteData(this, new MvcRouteHandler());
            routeData.Values.Add("controller", controller); //Goes to the relevant Controller  class
            routeData.Values.Add("action", action); //Goes to the relevant action method on the specified Controller
            routeData.Values.Add("subdomain", subDomain); //pass subdomain as argument to action method

            return routeData;
        }

        public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
        {
            //Implement your formating Url formating here
            return null;
        }
    }
}

RouteConfig.cs:

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.Add(new TRoute());

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }

«Индекс» Действие «HomeController»:

API api = new API();
        public ActionResult Index(string id, string subdomain)
        {
            string t = "";
            try { t = Request.Cookies[api.TokenTitle].Value.ToString(); }
            catch { }

            User cu = new User() { ID = -1 };
            ViewData.Add("max", api.getFilterRanges());

            if (!string.IsNullOrWhiteSpace(subdomain))
            {
                api.log(new Log() { Des = "Home Index, SubDomain => "+subdomain});
                string u = Request.Url.Authority;
                string tmpU = u;
                string scheme = Request.Url.Scheme;
                string[] sp = u.Split('.');
                u = sp[sp.Length - 2] + "." + sp[sp.Length - 1];

                if (api.PostExist(subdomain))
                {
                    api.log(new Log() { Des = "(tmpU => "+tmpU+") Home Index, PostExist => Redirecting To => \""+ scheme + "://" + u + "/Home/Post?Id = " + subdomain + "\" | SubDomain => " + subdomain });
                    Response.RedirectPermanent(scheme + "://" + u + "/Home/Post?Id = " + subdomain);
                    return RedirectPermanent(scheme + "://" + u + "/Home/Post?Id = " + subdomain);
                    //return Post(subdomain);
                }
                else if (api.ComplexExist(subdomain))
                {
                    api.log(new Log() { Des = "(tmpU => " + tmpU + ") Home Index, ComplexExist => Redirecting To => \"" + scheme + "://" + u + "/Home/Complex?Id = " + subdomain + "\" | SubDomain => " + subdomain });
                    Response.RedirectPermanent(scheme + "://" + u+"/Home/Complex?Id = "+ subdomain);
                    return RedirectPermanent(scheme + "://" + u + "/Home/Complex?Id = " + subdomain);
                }
                else
                {
                    api.log(new Log() { Des = "(tmpU => " + tmpU + ") Home Index, Not Found => Redirecting To => \"" + scheme + "://" + u + "\" | SubDomain => " + subdomain });
                    Response.RedirectPermanent(scheme+"://" + u);
                    return RedirectPermanent(scheme + "://" + u);
                }

            }

            if (api.isTokenValid(t))
            {
                cu = api.getUserInfo(t);
                ViewData.Add("cu", cu);
                return View();
            }
            else
            {
                var c = new HttpCookie(api.TokenTitle);
                c.Expires = DateTime.Now.AddDays(-1);
                Response.SetCookie(c);
                ViewData.Add("cu", cu);
                return View();
            }
        }

Я понятия не имею, что я делаю неправильно или чего здесь не хватает, любая помощь будет оценена по достоинству <3

Обновлять: Код был в порядке, проблема возникла из-за изменения статуса SSL на хосте, и он испортил подстановочный знак, попросил хостинг-провайдера установить его снова, и теперь все работает.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
88
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Обновление: код был в порядке, проблема возникла из-за изменения статуса SSL на хосте, и он испортил подстановочный знак, попросил хостинг-провайдера установить его снова, и теперь все работает.

Другие вопросы по теме