我可以使用ASP.NET路由并在特定路由中重写URL吗?

时间:2018-08-17 10:56:14

标签: asp.net .net iis url-rewriting url-routing

我正在IIS 8上使用ASP.NET开发大型云应用程序。我们主要使用基于属性的ASP.NET routing,并且HTTP端点分布在许多Web API控制器类中(分布在许多类中)(认为100个)主要是松散耦合的模块。

现在,对于一种特定的(参数化的)路由,我想执行URL重写。

到目前为止,我正在将IIS URL Rewrite module与基于RegEx的规则一起使用。但是,对于我们的目的而言,这还不够动态。 1

基本上,我想使用路由的一部分,将其用作模块中运行时可用的内部映射中的键,然后根据键映射到的值重写URL。我想像这样的东西(伪C#):

[Route("execute/{machine}/{port}")]
[HttpGet]
public MyResponse DoSomething(string machine, int port)
{
    string hostName;
    if (!knownHosts.TryGetValue(machine, out hostName))
    {
        throw new HttpResponseException(HttpStatusCode.NotFound);
    }
    return RewriteRequest($"https://{hostName}.mycompany.com:{port}/myspecialcommand");
}

我看到了一些相关的资源,但是没有一个能完全解决我的问题:

是否可以通过我的路由方法告诉IIS当前处理的请求的URL需要重写?


1 :意味着我们可以在web.config中使用基于RegEx的固定规则,但这并不是一个好的解决方案。

0 个答案:

没有答案