У меня есть существующая реализация, которая предоставляет 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
Три проблемы, с которыми я сталкиваюсь
- пользователь вводит https://example.com/User1 и перенаправляет на https://user1.example.com
- если пользователь enterse https://user1.example.com и он должен перейти к назначенному или жестко закодированному контроллеру
- пользователь вводит 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-е, как я могу дифференцировать или написать правило или оно должно обрабатываться в коде?
Требуется мнение эксперта.
Спасибо