如何在控制器动作方法中获取用户输入的完整带域名URL
获取触发404错误的完整请求URL(控制器中)
前提说明
当用户输入带无效路径的域名触发404时,要在控制器动作里拿到完整URL,需先确保404请求能被路由到自定义错误控制器,而非服务器默认的静态错误页。
1. 配置自定义404错误路由
ASP.NET MVC(非Core)
在web.config中添加自定义错误配置,将404请求指向错误控制器的指定动作:
<system.web> <customErrors mode="On" defaultRedirect="~/Error/General"> <error statusCode="404" redirect="~/Error/NotFound"/> </customErrors> </system.web>
ASP.NET Core
在Startup.cs的Configure方法中,配置状态码页面重定向到错误控制器:
app.UseStatusCodePagesWithReExecute("/Error/{0}");
2. 在错误控制器中获取完整URL
ASP.NET MVC(非Core)
在错误控制器的NotFound动作里,通过Request.Url直接获取包含域名、路径和参数的完整URL:
public ActionResult NotFound() { // 获取浏览器输入的完整URL string fullRequestedUrl = Request.Url.AbsoluteUri; // 可根据需求拆分各部分:域名、路径、查询参数 // string domain = Request.Url.Host; // string pathWithQuery = Request.Url.PathAndQuery; // string fullUrl = $"https://{domain}{pathWithQuery}"; // 这里可以添加日志记录或其他业务逻辑 return View(); }
ASP.NET Core
在错误控制器中,通过Request对象的组合属性拼接完整URL:
public IActionResult NotFound() { // 拼接协议、域名、路径和查询参数,得到完整URL string fullRequestedUrl = $"{Request.Scheme}://{Request.Host}{Request.Path}{Request.QueryString}"; // 后续处理逻辑,比如记录日志 return View(); }
注意事项
- 如果是IIS托管,需确保IIS的默认404错误页设置被覆盖,避免跳过控制器逻辑。
- 若使用HTTPS,
Request.Scheme会自动识别为https,无需硬编码协议。
内容的提问来源于stack exchange,提问作者nado1122
相关产品推荐
相关产品推荐

