OWIN中间件中的URL重写

米雷克

URL重写存在问题,该问题在Global.asax中有效,但在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);
    }
}

我希望调用控制器“ Home”的“ Global”操作...但是,将调用默认操作“ Index”。

之后的路径是改变context.Request.Uri.AbsoluteUriIShttp://localhost/Global/Home

但是管制员Request.Url.AbsoluteUri仍然http://localhost

我什至尝试过,context.Environment["owin.RequestPath"] = "/Home/Global";但这似乎也不起作用。

在有人问之前,是的,我IAppBuilder.Use(typeof(GlobalizationMiddleware))在Startup.cs中调用,调试器输入了Invoke方法。

我究竟做错了什么?

编辑

我什至尝试引用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");

编辑2-找到了一个可行的解决方案(请参阅下文),但我不确定这是否是正确的解决方案,请多加评论:)

米雷克

我找到了可行的解决方案。

不幸的是,我需要包含System.Web。我直接在RequestContext中更改RouteData对象。

System.Web.Routing.RequestContext requestContext = context.Environment["System.Web.Routing.RequestContext"] as System.Web.Routing.RequestContext;
requestContext.HttpContext.RewritePath("Home/Global");
requestContext.RouteData.Values["action"] = "Global";

但这感觉太不客气了……我不确定这是否是正确的解决方案,所以我不会接受此为有效答案,也许有人会提供更好的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用OWIN中间件重写对静态文件的请求的版本化url?

来自分类Dev

Serilog Owin 中间件

来自分类Dev

在中间件Laravel中获取URL

来自分类Dev

OWIN中间件中的全局异常处理

来自分类Dev

如何在OWIN中删除中间件?

来自分类Dev

使用OWIN中间件记录异常

来自分类Dev

OWIN中间件用法的实际示例

来自分类Dev

启动/停止OWIN中间件?

来自分类Dev

带CAS的OWIN中间件

来自分类Dev

使用OWIN中间件记录异常

来自分类Dev

烧瓶中的中间件

来自分类Dev

在Laravel 5的中间件中获取URL ID

来自分类Dev

机架中间件中的机架中间件?

来自分类Dev

在 NodeJS/ExpressJS 的中间件中调用中间件

来自分类Dev

Asp.Net Core UseHttpsRedirection中间件与IIS URL重写规则

来自分类Dev

如何使用OWIN安全中间件在应用程序中设置NameClaimType

来自分类Dev

如何在ASP.NET 5中使用基于IAppBuilder的Owin中间件

来自分类Dev

如何在自定义的Owin中间件中安全地拦截Response流

来自分类Dev

如何在F#中定义owin中间件类?

来自分类Dev

OWIN OAuth2 中间件在重定向 uri 中带有 %23(# 片段)

来自分类Dev

运行Asp.Net Mvc作为OWIN中间件?

来自分类Dev

如何使用Owin中间件拦截404

来自分类Dev

OWIN中间件可以使用http会话吗?

来自分类Dev

通过OWIN中间件路由所有请求

来自分类Dev

OWIN OpenIdConnect中间件-动态设置RedirectUri

来自分类Dev

OWIN中间件PostAuthenticate事件从不触发

来自分类Dev

用于自托管方案的OWIN压缩中间件

来自分类Dev

HTTP模块和OWIN中间件之间的区别

来自分类Dev

OWIN中间件可以使用http会话吗?