You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Framework 4.8 + IIS下/api/v1/路径跨域名重定向咨询

在ASP.NET Framework 4.8与IIS中实现/api/v1/路径的域名重定向

方法一:使用IIS URL Rewrite模块(推荐)

这是IIS层面的解决方案,性能最优且无需修改应用代码,是首选方案。

  1. 先确认服务器已安装IIS URL Rewrite模块,如果没装,打开IIS管理器,通过「Web平台安装程序」搜索安装即可。
  2. 在主站点的web.config中添加重写规则:
<system.webServer>
  <rewrite>
    <rules>
      <rule name="Redirect API v1 to subdomain" stopProcessing="true">
        <!-- 匹配以api/v1/开头的路径 -->
        <match url="^api/v1/(.*)" />
        <!-- 仅处理主域名的请求,避免循环重定向 -->
        <conditions>
          <add input="{HTTP_HOST}" pattern="^mydomain\.com$" />
        </conditions>
        <!-- 重定向到api子域名,保留原路径与查询参数 -->
        <action type="Redirect" url="https://api.mydomain.com/api/v1/{R:1}" 
                redirectType="Permanent" /> <!-- 长期迁移用301永久重定向,临时调整可用307 -->
      </rule>
    </rules>
  </rewrite>
</system.webServer>
  • {R:1}会自动捕获api/v1/之后的所有路径内容,保证原请求的路径完整保留。

方法二:自定义HttpModule(代码层面)

如果无法使用URL Rewrite模块,可通过ASP.NET的请求管道实现重定向:

  1. 创建自定义模块类:
using System;
using System.Web;

public class ApiV1RedirectModule : IHttpModule
{
    public void Init(HttpApplication context)
    {
        context.BeginRequest += Context_BeginRequest;
    }

    private void Context_BeginRequest(object sender, EventArgs e)
    {
        var app = (HttpApplication)sender;
        var request = app.Context.Request;
        
        // 校验主域名+api/v1路径的请求
        if (request.Url.Host.Equals("mydomain.com", StringComparison.OrdinalIgnoreCase) &&
            request.Path.StartsWith("/api/v1/", StringComparison.OrdinalIgnoreCase))
        {
            // 拼接目标URL,保留原路径和查询参数
            var targetUrl = $"https://api.mydomain.com{request.Path}{request.QueryString}";
            // 发送永久重定向响应
            app.Context.Response.RedirectPermanent(targetUrl);
        }
    }

    public void Dispose()
    {
        // 按需清理资源
    }
}
  1. 在web.config中注册模块(兼容经典与集成模式):
<system.web>
  <httpModules>
    <add name="ApiV1RedirectModule" type="你的命名空间.ApiV1RedirectModule" />
  </httpModules>
</system.web>
<system.webServer>
  <modules>
    <add name="ApiV1RedirectModule" type="你的命名空间.ApiV1RedirectModule" preCondition="managedHandler" />
  </modules>
</system.webServer>
  • 注意替换代码中的「你的命名空间」为实际类所在的命名空间。

方法三:利用ASP.NET MVC路由规则

如果你的应用是MVC架构,可通过路由规则实现:

  1. 在RouteConfig.cs中添加重定向路由:
using System.Web.Routing;
using System.Web.Mvc;

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        // 优先匹配api/v1开头的请求
        routes.MapRoute(
            name: "ApiV1Redirect",
            url: "api/v1/{*catchall}",
            defaults: new { controller = "Redirect", action = "ApiV1" }
        );

        // 原有默认路由
        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
        );
    }
}
  1. 创建RedirectController处理重定向逻辑:
using System.Web.Mvc;

public class RedirectController : Controller
{
    public ActionResult ApiV1(string catchall)
    {
        var targetUrl = $"https://api.mydomain.com{Request.Path}{Request.QueryString}";
        return RedirectPermanent(targetUrl);
    }
}

内容的提问来源于stack exchange,提问作者perfect_element

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 20:35:24