簡體   English   中英

在 ASP.NET 5 中將 HttpContext.Current.RewritePath 放在哪里?

[英]Where to place HttpContext.Current.RewritePath in ASP.NET 5?

我在asp.net做開發。 最近我發現在asp.net 5中沒有Global.asax文件。

放在Global.asax文件中的一件事是 URL 重寫。

隨着Global.asax文件消失了。 我可以在哪里放置 URL 重寫代碼。 我的意思是我在ASP.NET 4.0做這樣的事情

 HttpContext.Current.RewritePath(...);

我不想使用 URL 重寫模塊。 我只想使用HttpContext.Current.RewritePath方法來做到這一點。

我的問題是我可以把上面的代碼放在ASP.NET 5什么地方?

在您的 Startup 中的 Configure 方法的開頭創建並添加一個新的中間件(您希望它在任何其他中間件之前執行)。 示例在這里

實現invoke方法如下進行url重寫

public Task Invoke(HttpContext context)
{
    // modify url
    context.Request.Path = new PathString(context.Request.Path.Value + 'whatever');
    // continue
    return _next(context);
}

我在 Github 上分析aspnet/StaticFiles 存儲庫時遇到了這個問題。

作為顯式創建中間件類的替代方法,也可以使用IApplicationBuilder.Use

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
    //...built-in initialization...

    app.Use(requestDelegate =>
    {
        return new RequestDelegate(context =>
        {
            // modify url (from mbudnik's answer)
            context.Request.Path = new PathString(context.Request.Path.Value + 'whatever');

            // continue with the pipeline
            return requestDelegate(context);
        });
    });
}

在這種情況下,中間件直接指定為Func<RequestDelegate, RequestDelegate>實例,而不是自定義類。

您需要 OWIN 中間件。 因為它是 vNext 中 HttpModules 的替代品。

Startup.cs文件的 Configure 方法中寫入以下代碼

public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.UseMiddleware<MyMiddleware>();
    }
}

您的定制中間件可能如下所示:

public class MyMiddleware
{
    private readonly RequestDelegate _test;

    public MyMiddleware(RequestDelegate test)
    {
        _test = test;
    }

    public async Task Invoke(HttpContext context)
    {   
        return _test.Invoke(context);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM