Хорошо, позвольте мне спросить это по-другому. У нас есть веб-приложение. У нас есть платные и пробные подписки. У каждого из них в настоящее время есть папка, названная в честь их идентификатора пользователя, и именно там живет их код. Код получает свой идентификатор пользователя из URL-адреса, поэтому мы не можем изменить URL-адрес. Я хочу объединить расположение нашего кода, чтобы люди переходили по тому же URL-адресу, что и сегодня (имя сайта/имя пользователя), но он возвращал код приложения (который представляет собой структуру папок) из одного места. Я пробовал все, что мог придумать, но Server.Transfer не может передать в папку, передача в index.html не работает, Server.TransferLocation и (конечно) Response.Redirect меняют URL-адрес на стороне клиента .
Я пытался сделать это в RouteHandler, и в контроллере это не имеет значения, я не могу найти способ прозрачно перенаправить пользователя в центральную кодовую базу. В идеале я бы сделал это в коде, чтобы я мог проверить, что это за пользователь, и перенаправить его соответствующим образом.
После многих итераций вот основной код прямо сейчас:
public class FarmHttpHandler : IRouteHandler
{
enum UserType { Invalid = -1, Standard = 1, Tester = 2, Developer = 3}
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
// Note - this has to be a valid URL, or it will loop forever, as our HTTP handler is at the base level.
// We need to add a 'bad request' page, or it could default to the demo ( this would be a support nightmare though, if someone mistyped their URL,
// they would think it was fine, at first.
string redirect = "/Home/Error";
var routeValues = requestContext.RouteData.Values;
if (routeValues.ContainsKey("farmName"))
{
string farmName = routeValues["farmName"].ToString();
string baseUrl = "/";// HttpContext.Current.Request.Url.AbsoluteUri.Replace(HttpContext.Current.Request.Url.AbsolutePath, "/");
switch(GetUserType(farmName))
{
case UserType.Invalid:
break;
case UserType.Developer:
redirect = baseUrl + Settings.BetaAppPath;
break;
case UserType.Standard:
redirect = baseUrl + Settings.FullAppPath;
break;
case UserType.Tester:
redirect = baseUrl + Settings.TesterAppPath;
break;
}
}
HttpContext.Current.Server.TransferRequest(redirect);
requestContext.HttpContext.RewritePath(redirect);
return requestContext.HttpContext.Handler;
}
Это вызывается, но путь перезаписи ничего не делает (ошибка говорит, что IHttpHandler не был возвращен), и TransferRequest работает, но URL-адрес изменяется в браузере. Код также использует относительные пути для изображений и т. д., и они не загружаются (не уверен, что смогу это исправить).
farmName
? - person LostInComputer   schedule 07.12.2013