У меня возникла проблема с перезаписи URL-адресов, которая работает в Global.asax, но не в промежуточном программном обеспечении OWIN.URL-адрес перезаписи в промежуточном программном обеспечении OWIN
Global.asax код
protected void Application_BeginRequest()
{
//Perfectly working rewrite.
//By route rules, this resolves to the action Global()
//of the HomeController
HttpContext.Current.RewritePath("Home/Global");
}
Owin код промежуточного слоя (используется для обнаружения культуры, кода укороченной для краткости)
public class GlobalizationMiddleware : OwinMiddleware
{
public GlobalizationMiddleware(OwinMiddleware next)
: base(next)
{ }
public async override Task Invoke(IOwinContext context)
{
context.Request.Path = new PathString("/Home/Global");
await Next.Invoke(context);
}
}
я ожидаю, что "Global" действие контроллера "Home" получает но вместо этого вызывается действие по умолчанию «Индекс».
После того, как путь изменяется context.Request.Uri.AbsoluteUri
является http://localhost/Global/Home
Но контроллера Request.Url.AbsoluteUri
еще http://localhost
Я даже пытался context.Environment["owin.RequestPath"] = "/Home/Global";
но Безразлично, кажется, работает.
Прежде чем кто-нибудь спросит, да, я вызываю IAppBuilder.Use(typeof(GlobalizationMiddleware))
в Startup.cs, и отладчик вводит метод Invoke.
Что я делаю неправильно?
EDIT
Я даже попытался ссылки System.Web
, а затем делать это ... не работает, либо :(
System.Web.Routing.RequestContext requestContext = context.Environment["System.Web.Routing.RequestContext"] as System.Web.Routing.RequestContext;
requestContext.HttpContext.RewritePath("/Home/Global");
System.Web.HttpContextBase contextBase = context.Environment["System.Web.HttpContextBase"] as System.Web.HttpContextBase;
contextBase.RewritePath("/Home/Global");
EDIT 2 - Нашел рабочий раствор (см ниже), но Я не уверен, что это правильное решение, комментарии будут оценены :)
Зачем вам нужно переписать, и почему IIS Url Rewriter не работает для вашей ситуации? –
IIS Url Rewriter может работать для моего прецедента, я не уверен ... Я просто утонул в этой проблеме, поэтому я разместил его, надеюсь, это не проблема :) Моим вариантом использования является то, что у меня есть несколько доменов, указывающих на мой сайт (каждый домен имеет другую конфигурацию бизнес-логики) и один домен «каталог», который представляет собой список ссылок на эти доступные домены. Если я получаю доступ к домену, который больше не указан или домен не передает различные бизнес-утверждения о его конфигурации, я хочу вместо этого отобразить домен «каталог» ... который представляет собой просто другое представление с разным расположением. – Mirek