c# - 从 IOwinContext 获取路由模板

标签 c# asp.net-web-api owin owin-middleware

我希望从请求中获取路由模板。我正在使用 OwinMiddleware 并重写接受 IOwinContext 的 Invoke 方法。

public override async Task Invoke(IOwinContext context)
{
    ...
}

给定请求 URL:http://api.mycatservice.com/Cats/1234

我想获取“Cats/{CatId}

我尝试使用以下方法转换它但未成功:

HttpRequestMessage msg = new HttpRequestMessage(new HttpMethod(context.Request.Method), context.Request.Uri);

HttpContextBase httpContext = context.Get<HttpContextBase>(typeof(HttpContextBase).FullName);

供引用:

这是一个post about how to do this using HttpRequestMessage我已经为另一个项目成功实现了

最佳答案

我遇到了同样的问题,这似乎有效。有点神奇,但到目前为止还不错:

public class RouteTemplateMiddleware : OwinMiddleware
{
    private const string HttpRouteDataKey = "MS_SubRoutes";
    private readonly HttpRouteCollection _routes;

    public RouteTemplateMiddleware(OwinMiddleware next, HttpRouteCollection routes) : base(next)
    {
        _routes = routes;
    }

    public override async Task Invoke(IOwinContext context)
    {
        var routeData = _routes.GetRouteData(new HttpRequestMessage(new HttpMethod(context.Request.Method), context.Request.Uri));
        var routeValues = routeData?.Values as System.Web.Http.Routing.HttpRouteValueDictionary;

        var route = routeValues?[HttpRouteDataKey] as System.Web.Http.Routing.IHttpRouteData[];
        var routeTemplate = route?[0].Route.RouteTemplate;

        // ... do something the route template

        await Next.Invoke(context);
    }
}

像这样注册中间件:

public void Configuration(IAppBuilder app)
{
    _httpConfiguration = new HttpConfiguration();
    _httpConfiguration.MapHttpAttributeRoutes();
    ...

    app.Use<RouteTemplateMiddleware>(_httpConfiguration.Routes);
    ...
}

关于c# - 从 IOwinContext 获取路由模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37287665/

相关文章:

C# 嵌套流与 using 语句,我应该使用两个 using 吗?

c# - 我如何计算列表中的重复项并更改项目值

c# - ASP Identity GetExternalLoginInfoAsync 总是返回 null

.net - OWIN 身份验证管道正确使用 Katana 中间件?

c# - 要求对 OWIN 应用程序的所有请求进行身份验证

c# - 当小 View 堆叠在顶部时,无法滚动 Xamarin.Forms ScrollView

C#串口,模拟串口写入

asp.net - 倒带请求正文流

c# - Swagger API 不刷新文档

asp.net-mvc - 我可以从服务器端的承载 token 中检索用户信息 - web api 2吗?