Переписать подпапку в поддомен в mvc - PullRequest
0 голосов
/ 25 июня 2019

У меня есть существующая реализация, которая предоставляет URL для каждого пользователя, например,

https://example.com/FirstUser
https://example.com/SecondUser 

Это зависит от клиента, какой URL он хотел бы иметь после https://example.com, и до сих пор мы обрабатывали егоМаршруты MVC и его работа в порядке.

Это должно быть изменено на https://FirstUser.example.com

Может ли кто-нибудь помочь мне, каким должен быть лучший способ, я просмотрел некоторые блоги и, кажется, мне нужно добавить перенаправление для перенаправленияURL от https://example.com/FirstUser до https://FirstUser.example.com

<rule name="redirect" stopProcessing="true">
                    <match url="users/([_0-9a-z-]+)(.*)" />
                    <conditions>
                        <add input="{HTTP_HOST}" pattern="www.example.net" />
                    </conditions>
                    <action type="Redirect" url="http://{R:1}.example.net{R:2}" />
                </rule>

https://forums.iis.net/t/1176588.aspx?Rewrite+Subfolder+to+Subdomain

в моем случае это могут быть пользователи или имя контроллера, поэтому после "/" это может быть userURL илиИмя контроллера, например https://example.com/Login

Три проблемы, с которыми я сталкиваюсь

  1. пользователь вводит https://example.com/User1 и перенаправляет на https://user1.example.com
  2. если пользователь enterse https://user1.example.com и он должен перейти к назначенному или жестко закодированному контроллеру
  3. пользователь вводит https://example.com, он должен перейти на страницу входа

, чтобы разобратьсяВо-вторых, есть решение

public class SubdomainRoute : RouteBase
        {

            public override RouteData GetRouteData(HttpContextBase httpContext)
            {
                var host = httpContext.Request.Url.Host;
                var index = host.IndexOf(".");
                string[] segments = httpContext.Request.Url.PathAndQuery.Split('/');

                if (index < 0)
                    return null;

                var subdomain = host.Substring(0, index);
                string controller = (segments.Length > 0) ? segments[0] : "Home";
                string action = (segments.Length > 1) ? segments[1] : "Index";

                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;
            }
        }

m, которое не может обработать 1 и 3-е, как я могу дифференцировать или написать правило или оно должно обрабатываться в коде?

Требуется мнение эксперта.

Спасибо

...