实现ASP.NET MVC/C#网站公IP访问自动重定向至域名
实现ASP.NET MVC输入公网IP自动重定向到域名
下面提供几种可靠的实现方式,按需选择:
方法一:自定义Action过滤器(推荐MVC场景)
创建全局过滤器,对所有请求做校验,当请求来自IP地址时触发重定向:
using System.Net; using System.Web.Mvc; public class RedirectFromIpAttribute : ActionFilterAttribute { // 替换成你的目标域名 private const string TargetDomain = "google.com"; public override void OnActionExecuting(ActionExecutingContext filterContext) { var request = filterContext.HttpContext.Request; var host = request.Url.Host; // 校验当前请求主机是否为IP地址 if (IPAddress.TryParse(host, out _)) { // 保留原请求协议(HTTP/HTTPS) var targetUrl = $"{request.Url.Scheme}://{TargetDomain}{request.Url.PathAndQuery}"; // 301永久重定向,对SEO更友好;若需临时重定向,将permanent设为false filterContext.Result = new RedirectResult(targetUrl, permanent: true); } base.OnActionExecuting(filterContext); } }
接着在App_Start/FilterConfig.cs中注册这个全局过滤器:
public class FilterConfig { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new RedirectFromIpAttribute()); filters.Add(new HandleErrorAttribute()); } }
方法二:全局请求拦截(Global.asax)
如果不想用过滤器,也可以在Global.asax.cs的Application_BeginRequest事件中处理,覆盖所有请求:
using System.Net; using System.Web; protected void Application_BeginRequest() { var request = HttpContext.Current.Request; var host = request.Url.Host; const string TargetDomain = "google.com"; if (IPAddress.TryParse(host, out _)) { var targetUrl = $"{request.Url.Scheme}://{TargetDomain}{request.Url.PathAndQuery}"; Response.RedirectPermanent(targetUrl); } }
注意事项
- 若需临时重定向,可将方法一中的
permanent: true改为false,或方法二中的RedirectPermanent替换为Redirect。 - 务必把
TargetDomain替换为你实际的域名,比如yourdomain.com。 - 若网站有多个合法域名需要排除,可扩展逻辑添加白名单判断。
- 测试时注意区分本地IP(如127.0.0.1)和公网IP,可根据需求调整校验逻辑。
内容的提问来源于stack exchange,提问作者Cristian Fuentes
相关产品推荐
相关产品推荐

