2015-09-07 42 views
2

我在asp.net做開發。最近我發現在asp.net 5沒有Global.asax文件。在asp.net 5中放置HttpContext.Current.RewritePath的位置?

放入Global.asax文件的東西之一是url rewriting

隨着Global.asax文件不見了。我可以在哪裏放置url rewriting的代碼。我的意思是我做這樣的事情在asp.net 4.0

HttpContext.Current.RewritePath(...); 

我不想用url rewriting modules我只是想用HttpContext.Current.RewritePath方法來做到這一點。

我的問題是我可以把上面的代碼放在asp.net 5

+0

OWIN中間件是ASP.NET vNext中的HttpModules的替代品。 – Neel

+0

和耶,因爲我說它是Startup.cs! – Neel

+0

在global.asax中是否有像Application_BeginRequest這樣的事件? – Alex

回答

0

創建和配置方法開始在啓動添加新的中間件(你希望它在任何其他中間件之前執行)。例如here

如下做一個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回購實現invoke方法。

0

這裏需要OWIN中間衣。因爲它是vNext中的HttpModules的替代品。

下面寫代碼Startup.cs文件

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

的配置方法和您的自定義middlewear可能看起來像:

public class MyMiddleware 
{ 
    private readonly RequestDelegate _test; 

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

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

我將如何做'url rewriting'? – Alex

0

作爲替代顯式地創建一箇中間件類,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>實例,而不是自定義類。