Current URL in ASPCore Middleware?

2020-04-09 10:57发布

问题:

Is there a way I can access the current Requested URL in ASPCore 2.0 Middleware?

Is there something I can Inject?

回答1:

HttpContext object will be passed to the Invoke method of your middleware. You can access the Request property on that.

You can use the GetDisplayUrl extension method or GetEncodedUrl extension method.

public Task Invoke(HttpContext context)
{
    var url1 =context.Request.GetDisplayUrl();
    var url2  = context.Request.GetEncodedUrl();       


    // Call the next delegate/middleware in the pipeline
    return this._next(context);
}

These 2 extension methods are defined in Microsoft.AspNetCore.Http.Extensions namespace. So make sure you have a using statement to include the namespace

using Microsoft.AspNetCore.Http.Extensions;


回答2:

Your middleware get HttpContext context which has

//
// Summary:
//     /// Gets the Microsoft.AspNetCore.Http.HttpRequest object for this request. ///
public abstract HttpRequest Request { get; }

So you may get all needed info in next way:

app.Use(async (context, next) =>
{
    //context.Request.Path
    //context.Request.QueryString
    ...

    await next.Invoke();

});